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

如何统计两个列表的公共元素数量(含双方均存在的重复项)

统计列表公共元素(重复项按规则计数)

需求说明

统计两个列表的公共元素总数量,重复项遵循以下规则:

  • 若元素在一个列表出现1次、另一个列表出现2次,计1次
  • 若元素在两个列表均出现2次,计2次
  • 最终总数是所有元素按上述规则计算后的累加值

示例

示例1:

x = [1, 2, 3, 4, 5, 5]  
y = [1, 2, 5, 6, 7, 8]  

公共元素数量为3(1、2各计1次,5计1次,总和1+1+1=3)

示例2:

x = [1, 2, 3, 4, 5, 5]  
y = [1, 2, 5, 6, 7, 8, 5]  

公共元素数量为4(1、2各计1次,5计2次,总和1+1+2=4)

问题

找到的代码 res = sum(i == j for i, j in zip(x, y)) 不符合需求,该代码仅按位置匹配相等元素计数,无法正确统计重复元素的出现次数。

解决方案

利用collections.Counter统计元素出现次数,对每个公共元素取两个列表中出现次数的最小值,累加得到结果:

from collections import Counter

def count_common_elements(x, y):
    cnt_x = Counter(x)
    cnt_y = Counter(y)
    # 遍历两个Counter的公共元素,取最小出现次数求和
    return sum(min(cnt_x[elem], cnt_y[elem]) for elem in cnt_x & cnt_y)

# 测试示例1
x1 = [1, 2, 3, 4, 5, 5]
y1 = [1, 2, 5, 6, 7, 8]
print(count_common_elements(x1, y1))  # 输出3

# 测试示例2
x2 = [1, 2, 3, 4, 5, 5]
y2 = [1, 2, 5, 6, 7, 8, 5]
print(count_common_elements(x2, y2))  # 输出4

说明

  • Counter会自动统计列表中每个元素的出现次数
  • cnt_x & cnt_y能直接获取两个Counter的公共元素(即同时存在于两个列表的元素)
  • 对每个公共元素,取两个列表中出现次数的最小值,累加后就是符合规则的总数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:20:16