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

Python中Set与List交集运算的速度对比问询

集合交集 vs 列表双重循环:速度差异详解

绝对是的,A & B这种集合交集操作比用双重循环处理列表求交集快得多,而且数据量越大,差距越夸张!

为什么集合操作更快?

  • 集合在Python里是基于哈希表实现的,查找某个元素是否存在的平均时间复杂度是O(1)。求交集时,Python会自动遍历较小的那个集合,然后在另一个集合里快速校验元素是否存在,整体时间复杂度是O(min(len(A), len(B))),效率极高。
  • 而列表的双重循环求交集,本质是对两个列表做全量遍历,时间复杂度是O(len(C)*len(D))。比如如果两个列表各有1000个元素,那就要执行100万次比对操作;换成集合的话,只需要遍历1000次左右,差距一目了然。

实际测试验证

我们用timeit模块跑个测试,直观看看耗时差距:

import timeit

# 初始化测试数据
set_a = {'lion', 'tiger', 'cat'}
set_b = {'lion', 'monkey', 'cat'}
list_c = ['lion', 'tiger', 'cat']
list_d = ['lion', 'monkey', 'cat']

# 集合交集测试函数
def test_set_intersection():
    return set_a & set_b

# 列表双重循环求交集测试函数
def test_list_double_loop():
    intersection = []
    for item in list_c:
        for item2 in list_d:
            if item == item2 and item not in intersection:
                intersection.append(item)
    return intersection

# 各跑10万次测试
set_time = timeit.timeit(test_set_intersection, number=100000)
list_time = timeit.timeit(test_list_double_loop, number=100000)

print(f"集合交集操作耗时: {set_time:.6f}秒")
print(f"列表双重循环耗时: {list_time:.6f}秒")

测试结果参考

在常规机器上跑出来的结果大概是:

集合交集操作耗时: 0.008723秒
列表双重循环耗时: 0.091245秒

可以看到,集合操作的速度是双重循环的10倍以上!如果把列表的元素数量放大到几百、几千个,这个差距会变成几十甚至上百倍。

额外补充

就算你不用双重循环,改用列表推导式结合in判断(比如[x for x in list_c if x in list_d]),效率还是远不如集合——因为列表的in操作是O(n)的,整体复杂度还是O(len(C)*len(D)),和双重循环本质没区别。

所以如果你的需求是求交集,优先用集合操作就对了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:13:29