Какой самый питонический способ сравнить два неупорядоченных списка по одному или нескольким их атрибутам? Мне было бы интересно узнать, есть ли питонический способ узнать, есть ли для каждого элемента списка A элемент в списке B, где элемент из списка A и элемент в списке B соответствуют указанному атрибуту.Pythonic Способ сравнения двух неупорядоченных списков по атрибутам
В моем примере, у меня есть два ZIP-файла в модульном тесте и вы хотите проверить, соответствуют ли файлы, но я действительно ищу хорошее общее решение для своего личного набора инструментов. Это была моя первая попытка:
with ZipFile('A.zip') as old:
with ZipFile('B.zip') as new:
oldFileInfo = old.infolist()
allFound = True
for info in new.infolist():
matches = [item for item in oldFileInfo if item.CRC == info.CRC and \
basename(item.filename) == basename(info.filename) ]
if len(matches) == 0:
allFound = False
break
Может быть, это тривиально, но я еще не нашел хороший способ, как это сделать.
Привет Майкл
Что-то не так с отступом. – bereal
Я согласен с ними как с fedorSmirnov, так и с редкими в своих ответах. Один берет, насколько вы заботитесь о производительности, а другой - с удобочитаемостью. Что для вас важнее? Если эта часть кода используется слишком много, я бы выбрал первый вариант. –
@ ArthurJulião Я не думаю, что сортировка и сравнение списков будут быстрее. Оба решения - O (n * log n), но 'issubset' - это что-то, реализованное внутри C, а пользовательская итерация - в Python. Возможно, стоит проверить. – bereal