www*_*iam 1 python performance set
这两个代码片段的速度有很大差异吗?
1.
x = set( i for i in data )
Run Code Online (Sandbox Code Playgroud)
与:
2.
x = set( [ i for i in data ] )
Run Code Online (Sandbox Code Playgroud)
我见过人们推荐set()而不是set([]); 这只是风格问题吗?
表格
x = set(i for i in data)
Run Code Online (Sandbox Code Playgroud)
是简写:
x = set((i for i in data))
Run Code Online (Sandbox Code Playgroud)
这将创建一个懒惰评估的生成器表达式.相比:
x = set([i for i in data])
Run Code Online (Sandbox Code Playgroud)
在传递给它之前创建一个完整的列表set
从性能的角度来看,生成器表达式允许在某些函数中进行短路(all并且any会想到)并且因为您不需要存储额外的列表而占用更少的内存 - 在某些情况下,这可能非常重要.
如果你实际上要遍历整个迭代data,并且内存对你来说不是问题,我发现通常列表理解比等效的生成器表达式*快一些.
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
Run Code Online (Sandbox Code Playgroud)
请注意,如果您对速度感到好奇 - 您最快的赌注可能只是:
x = set(data)
Run Code Online (Sandbox Code Playgroud)
证明:
temp $ python -m timeit 'set("xyzzfoobarbaz")'
1000000 loops, best of 3: 1.83 usec per loop
Run Code Online (Sandbox Code Playgroud)
*仅限Cpython - 我不知道Jython或pypy如何优化这些东西.