我有两个项目列表:
list_1 = ['A', 'B', 'C', 'C', 'D']
list_2 = ['C', 'C', 'F', 'A', 'G', 'D', 'C']
我想用两个列表中的元素创建一个新列表。像这样:
['A', 'C', 'C', 'D']
请注意,任何项目都可以在列表中重复多次,并且在新列表中出现的次数应与在两个列表中重复的次数一样多。例如,“C”在 list_1 中重复了 2 次,在 list_2 中重复了 3 次,因此它在结果中出现了 2 次。
经典的方法是:
import copy
result = []
list_2 = fruit_list_2.copy()
for fruit in fruit_list_1:
if fruit in list_2:
result.append(fruit)
list_2.remove(fruit)
但我有兴趣通过生成列表来做到这一点:[number for number in numbers if number > 0]。可能吗?
最佳答案
如果您不是很在意新列表的顺序,您可以使用 collections.Counter
。
>>> list((Counter(list_1) & Counter(list_2)).elements())
['A', 'C', 'C', 'D']
&
将两者的交集作为multi-set,最小的计数用于公共(public)元素。 elements
方法将结果中的项目作为迭代器返回,因此是 list
包装器。
关于Python:如何生成包含在两个列表中重复的项目的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769379/