这两个代码片段在速度上有很大区别吗?
1.
x = set( i for i in data )对比:
2.
x = set( [ i for i in data ] )我看到人们推荐set()而不是set([]);这仅仅是风格问题吗?
发布于 2013-01-29 03:51:14
表单
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 )中的短路,并且占用的内存更少,因为您不需要存储额外的列表--在某些情况下,这可能非常重要。
如果您实际上要迭代整个可迭代的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请注意,如果你对速度很好奇--你最快的选择可能是:
x = set(data)证明:
temp $ python -m timeit 'set("xyzzfoobarbaz")'
1000000 loops, best of 3: 1.83 usec per loop*仅限Cpython --我不知道Jython或pypy是如何优化这些东西的。
发布于 2013-01-29 03:51:49
[]语法创建一个列表,该列表在创建集合后立即被丢弃。因此,您正在增加程序的内存占用。
生成器语法避免了这种情况。
https://stackoverflow.com/questions/14569983
复制相似问题