可以使用Python中的Counter类来实现这个问题。Counter是一个字典子类,用于计算可迭代对象中每个元素的数量。具体来说,我们可以使用Counter类来计算每个列表中每个元素的出现次数,然后比较它们的相交部分。以下是示例代码:
from collections import Counter
def common_elements(list1, list2): dict1 = Counter(list1) dict2 = Counter(list2) intersection = dict1 & dict2 return list(intersection.elements())
list1 = [1, 2, 2, 3, 3, 3, 4, 5] list2 = [2, 3, 3, 4, 4, 6, 7] result = common_elements(list1, list2) print(result) # [2, 3, 3, 4]
在这个例子中,我们创建了两个Counter对象,分别对两个列表中的元素进行计数。然后我们使用逻辑与运算符(&)来计算两个Counter的交集。最后,我们使用elements()函数来获取交集中的所有元素,这些元素既是两个列表中的共同元素,也包括它们在各自列表中出现的次数。
上一篇:保留重复项的集合减法