Используйте, set
если вам нет дела до порядка или повторения предметов. Используйте списки, если вы делаете:
>>> def diff(first, second):
second = set(second)
return [item for item in first if item not in second]
>>> diff(A, B)
[1, 3, 4]
>>> diff(B, A)
[5]
>>>
set(b)
чтобы убедиться, что алгоритм O (nlogn) вместо Theta (n ^ 2)set
к B безвредно, но применение к результатуA
и использование результата вместо оригиналаA
- нет.Если порядок не имеет значения, вы можете просто рассчитать установленную разницу:
источник
Вы можете сделать
и
источник
Один лайнер:
Или:
источник
Python 2.7.3 (по умолчанию, 27 февраля 2014 г., 19:58:35) - IPython 1.1.0 - timeit: (github gist)
Полученные результаты:
@ roman-bodnarchuk Функция понимания списка def diff (a, b) работает быстрее.
источник
Приведенные выше примеры упрощают задачу вычисления различий. Предполагая, что сортировка или дедупликация определенно облегчит вычисление разницы, но если ваше сравнение не может позволить себе эти предположения, вам понадобится нетривиальная реализация алгоритма diff. Смотрите difflib в стандартной библиотеке python.
Вывод:
источник
print
изменилось с команды на функциюreduce
,filter
иmap
было объявлено непифоническим. (И я думаю, что Гвидо может быть прав - я тоже не понимаю, чтоreduce
делает.)источник
Вы хотели бы использовать
set
вместоlist
.источник
Если вы хотите, чтобы разница рекурсивно углублялась в элементы вашего списка, я написал пакет для python: https://github.com/erasmose/deepdiff
Монтаж
Установить из PyPi:
Если вы Python3, вам также необходимо установить:
Пример использования
Тот же объект возвращает пустой
Тип предмета изменился
Стоимость предмета изменилась
Товар добавлен и / или удален
Разница строк
Разница строк 2
Изменение типа
Разница в списке
Разница в списке 2: обратите внимание, что он НЕ принимает во внимание порядок
Список, содержащий словарь:
источник
самый простой способ,
используйте set (). разность (set ())
ответ
set([1])
источник
В случае списка словарей , решение для понимания полного списка работает, пока
set
решение поднимаетсяПрецедент
источник
Простой код, который дает вам разницу с несколькими элементами, если вы хотите, чтобы:
источник
Если взглянуть на временную сложность In-оператора, в худшем случае он работает с O (n). Даже для наборов.
Таким образом, при сравнении двух массивов мы будем иметь временную сложность O (n) в лучшем случае и O (n ^ 2) в худшем случае.
Альтернативное (но, к сожалению, более сложное) решение, которое работает с O (n) в лучшем и худшем случаях:
например
источник