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

如何迭代对比任意数量列表并返回所有列表的公共元素集合

多列表公共元素查找实现方案

对比两个列表取公共元素的操作确实很简单,直接用set(a) & set(b)就能搞定。如果要适配任意n个列表的公共元素查找需求,可以直接利用Python集合内置的intersection()方法实现,这个方法原生支持传入多个可迭代对象计算交集,不用自己写循环逐个判断。

基础通用实现

这个版本支持传入任意数量的列表,返回去重后的公共元素:

def find_common(*lists):
    # 处理无输入的边界情况
    if not lists:
        return []
    # 第一个列表转集合后,直接和剩余所有列表求交集
    return list(set(lists[0]).intersection(*lists[1:]))

使用示例

list1 = [1, 3, 5, 7, 9]
list2 = [2, 3, 5, 8, 9]
list3 = [3, 4, 5, 9, 10]
print(find_common(list1, list2, list3))
# 输出结果:[3, 5, 9] (顺序不固定,因为集合是无序的)

进阶:保留元素顺序的实现

如果需要公共元素的顺序和第一个输入列表的出现顺序保持一致,可以用下面的版本:

def find_common_preserve_order(*lists):
    if not lists:
        return []
    common_set = set(lists[0]).intersection(*lists[1:])
    seen = set()
    res = []
    for item in lists[0]:
        if item in common_set and item not in seen:
            res.append(item)
            seen.add(item)
    return res

注意事项

  • 上述实现返回的都是去重后的结果,如果需要保留元素的重复出现次数(比如要求每个列表中都至少出现2次的元素),可以改用collections.Counter统计每个列表的元素频率后再取交集
  • 如果输入的任意一个列表为空,返回的结果会是空列表,符合交集的运算逻辑
  • 无需提前指定n的数值,函数支持传入任意数量的列表参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:03