首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python的set()和set([])的速度有什么不同?

Python的set()和set([])的速度有什么不同?
EN

Stack Overflow用户
提问于 2013-01-29 03:49:50
回答 2查看 304关注 0票数 1

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

1.

代码语言:javascript
复制
x = set( i for i in data )

对比:

2.

代码语言:javascript
复制
x = set( [ i for i in data ] )

我看到人们推荐set()而不是set([]);这仅仅是风格问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 03:51:14

表单

代码语言:javascript
复制
x = set(i for i in data)

是以下的简写:

代码语言:javascript
复制
x = set((i for i in data))

这会创建一个延迟求值的generator expression。对比:

代码语言:javascript
复制
x = set([i for i in data])

,它在将列表传递给set之前创建整个列表。

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

如果您实际上要迭代整个可迭代的data,并且内存对您来说不是问题,我发现列表理解通常比等效的生成器表达式*略快一些。

代码语言:javascript
复制
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

请注意,如果你对速度很好奇--你最快的选择可能是:

代码语言:javascript
复制
x = set(data)

证明:

代码语言:javascript
复制
temp $ python -m timeit 'set("xyzzfoobarbaz")'
1000000 loops, best of 3: 1.83 usec per loop

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

票数 6
EN

Stack Overflow用户

发布于 2013-01-29 03:51:49

[]语法创建一个列表,该列表在创建集合后立即被丢弃。因此,您正在增加程序的内存占用。

生成器语法避免了这种情况。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14569983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档