<p>在生成元组和生成迭代器之间,这几乎是一次洗牌,但迭代器是靠鼻子赢的……:</p>
<pre><code>$ 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
</code></pre>
<p>不知道为什么所有的答案都使用较旧的语法<code>iter(x).next()</code>,而不是新的语法<code>next(iter(x))</code>,这对我来说似乎更可取(在Python 3.1中也适用)。</p>
<p>然而,解包将赢得以下两方面的胜利:</p>
<pre><code>$ 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
</code></pre>
<p>当然,这是针对单个项目集的(正如其他人所提到的,后者的优点是,如果您“知道”的一个项目集实际上只有一个项目集,那么失败的速度会很快)。对于具有任意N>;1个项的集,元组速度会减慢,iter不会:</p>
<pre><code>$ 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
</code></pre>
<p>因此,对于单例情况和<code>next(iter(x))</code>对于一般情况,解包似乎是最好的。</p>