Python:如何生成包含在两个列表中重复的项目的列表

标签 python python-3.x list list-comprehension generate

我有两个项目列表:

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/

相关文章:

python - Django 完全忽略异步测试(Django channel )

c# - 从通用 List<t> 中删除项目

python - Django REST Framework 的 AttributeError 和多对多关系

python - 如何使用复杂列表中的数字作为标题/如何仅打印列表中与特定值匹配的部分

python - Nan 不会在 Python 中退出

python - 如何做 sftp python 3?

python - 如何正常调用点击包装功能?

c++ - 如何将对象列表传递给函数

java - 如何从 Java 8 中的对象列表中获取两个属性的乘积

顶级模块代码中的 Python @ (at) 前缀 - 它代表什么?