Skip to main content
 首页 » 编程设计

python之Python的set()和set([])速度有什么区别

2025年05月04日10lovecherry

这两个代码片段在速度上有很大差异吗?

1.

x = set( i for i in data ) 

对比:

2.

x = set( [ i for i in data ] ) 

我见过有人推荐 set() 而不是 set([]);这只是风格问题吗?

请您参考如下方法:

表格

x = set(i for i in data) 

是以下内容的简写:

x = set((i for i in data)) 

这会创建一个 generator expression懒惰地评估。相比于:

x = set([i for i in data]) 

在将其传递给 set

之前 创建一个完整的列表

从性能的角度来看,生成器表达式允许在某些函数中进行短路(想到all 和any),并且在您不需要时占用更少的内存存储额外的列表——在某些情况下,这可能非常重要。

如果您实际上要遍历整个可迭代数据,并且内存对您来说不是问题,我发现通常列表理解比等效生成器稍快表达式*.

temp $ python -m timeit 'set(i for i in "xyzzfoobarbaz")' 
100000 loops, best of 3: 3.55 usec per loop 
temp $ python -m timeit 'set([i for i in "xyzzfoobarbaz"])' 
100000 loops, best of 3: 3.42 usec per loop 

请注意,如果您对速度感到好奇——您最快的选择可能是:

x = set(data) 

证明:

temp $ python -m timeit 'set("xyzzfoobarbaz")' 
1000000 loops, best of 3: 1.83 usec per loop 

*仅限 Cpython——我不知道 Jython 或 pypy 如何优化这些东西。