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

如何找出整数子列表中共有元素最多的列表?支持指定共有元素数

问题解决思路

你之前用set.intersection(*map(set, list))求的是所有子列表的公共元素,这和你要找的两两子列表间共有元素最多的需求不匹配,所以得到空集是正常的。要实现你的需求,需要遍历所有子列表对,计算每对的交集大小,再筛选符合条件的对子。

代码实现

1. 找出共有元素最多的子列表对

# 原始列表(注意不要用list当变量名,避免覆盖内置类型)
sublists = [[3,5,9], [4,6,6], [4,7], [2,7], [2,1,4,5], [1,2,4,6], [3,3], [3,3], [3,2,1], [3,2]]

# 存储所有子列表对及其交集大小
pair_intersections = []

# 遍历所有两两子列表对(避免重复比较,比如i<j)
for i in range(len(sublists)):
    set_i = set(sublists[i])
    for j in range(i+1, len(sublists)):
        set_j = set(sublists[j])
        # 计算交集大小
        common_count = len(set_i & set_j)
        pair_intersections.append( (common_count, sublists[i], sublists[j]) )

# 找出最大的交集元素数量
max_count = max(pair[0] for pair in pair_intersections)

# 筛选出所有交集数量等于最大值的对子
max_pairs = [ (pair[1], pair[2]) for pair in pair_intersections if pair[0] == max_count ]

# 输出结果
for pair in max_pairs:
    print(f"{pair[0]},{pair[1]}")

运行这段代码,输出就是你期望的:

[2,1,4,5],[1,2,4,6]

2. 根据指定共有元素数量返回对应子列表对

如果要指定交集大小(比如3个),只需修改筛选条件:

target_count = 3
target_pairs = [ (pair[1], pair[2]) for pair in pair_intersections if pair[0] == target_count ]

print("符合指定数量的子列表对:")
for pair in target_pairs:
    print(f"{pair[0]},{pair[1]}")

代码说明

  • 用set_i & set_j计算两个子列表的交集,len()得到共有元素数量
  • 遍历用i<j避免重复比较同一对子(比如[列表A,列表B]和[列表B,列表A]算同一个)
  • 把结果存储为(交集大小, 子列表1, 子列表2)的元组,方便后续筛选

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:35:24