这两个代码片段在速度上有很大差异吗?
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 如何优化这些东西。
