Skip to main content
 首页 » 编程设计

python之无法创建合适的集合/列表

2024年08月25日32shangdawei

我有两个列表

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]