You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中含重复元素的两个列表求交集的方法

计算含重复元素的两个列表的交集

要解决这个问题,核心是保留元素的重复次数,取两个列表中每个元素出现次数的最小值。下面提供两种实用的实现方式:

方法一:使用collections.Counter(推荐)

Python标准库的Counter可以方便地统计元素出现次数,我们只需对共同元素取最小次数并展开即可:

from collections import Counter

list1 = [1,2,3,4,4,4,5]
list2 = [4,4,5,5,6]

# 统计两个列表的元素频次
count1 = Counter(list1)
count2 = Counter(list2)

intersection = []
for num in count1:
    if num in count2:
        # 取当前元素在两个列表中出现次数的最小值,扩展到结果列表
        intersection.extend([num] * min(count1[num], count2[num]))

print(intersection)  # 输出: [4,4,5]

方法二:手动统计频次(无需导入库)

如果不想依赖标准库,可以手动统计其中一个列表的元素次数,再遍历另一个列表生成结果:

list1 = [1,2,3,4,4,4,5]
list2 = [4,4,5,5,6]

# 手动统计list1中各元素的出现次数
count_dict = {}
for num in list1:
    count_dict[num] = count_dict.get(num, 0) + 1

intersection = []
for num in list2:
    # 若当前元素还有剩余计数,则加入结果并减少计数
    if count_dict.get(num, 0) > 0:
        intersection.append(num)
        count_dict[num] -= 1

print(intersection)  # 输出: [4,4,5]

关于pandas的intersection()为什么不适用

pandas的intersection()是基于集合实现的,集合的特性会自动去重,因此只能得到去重后的元素集合(如示例中的{4,5}),无法保留重复元素的出现次数,所以不符合你的需求。

内容的提问来源于stack exchange,提问作者Louis Lalas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:20:59