Ответ, с которым вы связались, предлагает использовать наборы, потому что они используют хеши для быстрого поиска.
Со списками и in
, как
new_list = [i for i in h if i not in y]
весь список y
нуждается в проверке каждый раз для каждого i
в h
.
Вы можете использовать наборы, но, как уже было сказано, нужно быть осторожным с потерями дубликатов.
Вы можете использовать Counter
:
from collections import Counter
с двумя списками, скажем
l1 = [1,1,2,3,4]
l2 = [3,3,4,5,6]
для примера, можно использовать подачу в счетчик каждый
>>> Counter(l1)
Counter({1: 2, 2: 1, 3: 1, 4: 1})
>>> Counter(l2)
Counter({3: 2, 4: 1, 5: 1, 6: 1})
Это просто обходит каждый список один раз.
Вычитание их дает то, что находится в первом, но не во втором:
>>> Counter(l1)-Counter(l2)
Counter({1: 2, 2: 1})
elements
говорит вам, что вы хотите
>>> diff = Counter(l1)-Counter(l2)
>>> list(diff.elements())
[1, 1, 2]