Вот ответ Counter
для простейшего случая.
Это короче, чем приведенный выше, который выполняет двусторонние сравнения, потому что он выполняет только то, что задает вопрос: генерирует список того, что находится в первом списке, но не во втором.
from collections import Counter
lst1 = ['One', 'Two', 'Three', 'Four']
lst2 = ['One', 'Two']
c1 = Counter(lst1)
c2 = Counter(lst2)
diff = list((c1 - c2).elements())
В качестве альтернативы, в зависимости от ваших предпочтений читабельности, это может стать приличным однострочником:
diff = list((Counter(lst1) - Counter(lst2)).elements())
Выход:
['Three', 'Four']
Обратите внимание, что вы можете удалить вызов list(...)
, если просто выполняете его.
Поскольку в этом решении используются счетчики, оно правильно обрабатывает количества по сравнению со многими ответами на основе множеств. Например, для этого ввода:
lst1 = ['One', 'Two', 'Two', 'Two', 'Three', 'Three', 'Four']
lst2 = ['One', 'Two']
Вывод:
['Two', 'Two', 'Three', 'Three', 'Four']