$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=next(iter(x))'
1000000 loops, best of 3: 0.417 usec per loop
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=tuple(x)[0]'
100000 loops, best of 3: 3.12 usec per loop
元组解包工作。
(顺便说一下,python dev已经研究过了,但是拒绝添加
myset.get()
来从集合返回任意元素。Discussion here,Guido van Rossum回答1和2。)我个人最喜欢获取任意元素的方法是(当您有一个未知的数字时,但如果只有一个,也可以这样做):
1:在Python 2.5及之前版本中,必须使用
iter(myset).next()
我觉得kaizer.se's answer很棒。但是如果您的集合可能包含多个元素,并且您想要一个不是任意的元素,那么您可能需要使用^{} 或^{} 。E、 g.:
或:
(不要使用^{} ,因为这种用法有不必要的开销。)
在生成元组和生成迭代器之间,这几乎是一次洗牌,但迭代器是靠鼻子赢的……:
不知道为什么所有的答案都使用较旧的语法
iter(x).next()
,而不是新的语法next(iter(x))
,这对我来说似乎更可取(在Python 3.1中也适用)。然而,解包将赢得以下两方面的胜利:
当然,这是针对单个项目集的(正如其他人所提到的,后者的优点是,如果您“知道”的一个项目集实际上只有一个项目集,那么失败的速度会很快)。对于具有任意N>;1个项的集,元组速度会减慢,iter不会:
因此,对于单例情况和
next(iter(x))
对于一般情况,解包似乎是最好的。相关问题 更多 >
编程相关推荐