我有两个列表
a = [1,1,2,3]
b = [1,2]
我需要一个新的列表 c 来得到答案,它是通过从列表 a 中删除列表 b 的公共(public)元素而得出的。这意味着如果 b 有 1,2 那么在从 a 中删除后,新列表应该有 1,3 作为元素。
[1,3]
我试过了
d = set(a) & set(b)
c = set(a) - d
print c
但是我得到了
[3]
代替
[1,3]
我知道这是因为在我设置 (a) 的那一刻,重复的元素被截断了,我只剩下其中所有元素的一个副本。
但我的问题是我不希望删除重复的元素。
怎么办?
请您参考如下方法:
您可以使用 collections.Counter -
>>> a = [1,1,2,3]
>>> b = [1,2]
>>> from collections import Counter
>>> c = list((Counter(a) - Counter(b)).elements())
>>> c
[1, 3]
它所做的是计算列表 a 中的元素,然后计算列表 b 中的元素,然后减少列表 a 中的元素计数> 通过列表 b 中相似元素的计数,并将它们转换回列表并存储在 c 中。
如果 b 包含 a 中没有的元素,这甚至可以工作,例如 -
>>> a = [1,1,2,3]
>>> b = [1,2,4]
>>> list((Counter(a) - Counter(b)).elements())
[1, 3]
