gpt4 book ai didi

Python 列表减法操作*尊重重复*

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:50 25 4
gpt4 key购买 nike

我希望从另一个列表中减去一个列表,但要尊重重复:

>>> a = ['a', 'b', 'c','c', 'c', 'c', 'd', 'e', 'e']
>>> b = ['a', 'c', 'e', 'f','c']
>>> a - b
['b', 'c','c', 'd', 'e']

元素的顺序无关紧要。

有问题有答案here但它忽略了重复。那里的解决方案将提供:

>>> a - b
['b', 'd']

一个解决方案考虑了重复但它改变了原始列表之一:

[i for i in a if not i in b or b.remove(i)]

我写了这个解决方案:

a_sub_b = list(a)
b_sub_a = list(b)
for e in a:
if e in b_sub_a:
a_sub_b.remove(e)
b_sub_a.remove(e)

print a_sub_b # a - b
print b_sub_a # b - a

这对我有用,但是否有更好的解决方案,更简单或更有效?

最佳答案

如果顺序无关紧要,请使用 collections.Counter :

c = list((Counter(a) - Counter(b)).elements())

Counter(a) - Counter(b) 构建一个计数器,其中元素 x 的计数等于 x 的次数出现在 a 中的次数减去 x 出现在 b 中的次数。 elements() 创建一个迭代器,该迭代器生成每个元素的次数等于其计数,list 将其转换为列表。整个过程需要 O(len(a)+len(b)) 时间。

请注意,根据您的操作,最好不要使用列表,而只保留 abc 表示为计数器。

关于Python 列表减法操作*尊重重复*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com