从另一个列表中的列表中删除元素,同时保留重复项
我想删除 l1 中 l2 中的元素,同时保留重复项。
输入:
l1 = [a, b, b, a, c, c, a]
l2 = [c, b]
输出:
l3 = [a, b, a, c, a]
我试图为此找到一个很好的答案,但我似乎找到的只是这样做的方法,它也删除了重复项。首先,我尝试使用 set() 执行此操作,直到我意识到它会删除重复项,然后我尝试使用 numpy 和 setdiff1d 但无法使其正常工作。使用列表理解,如
[item for item in x if item not in y]
还删除了重复项。从列表中删除另一个列表中的元素而不删除重复项的最简单方法是什么?列表的顺序并不重要。
回答
只需使用Counter:
from collections import Counter
l1 = ["a", "b", "b", "a", "c", "c", "a"]
l2 = ["c", "b"]
print(list((Counter(l1)-Counter(l2)).elements()))
结果:
['a', 'a', 'a', 'b', 'c']
- "Order of the lists is not important."