Zwischen dem Erstellen eines Tupels und dem Erstellen eines Iterators ist es fast eine Wäsche, aber die Iteration gewinnt durch eine Nase ...:
$ 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
Ich bin mir nicht sicher, warum alle Antworten die ältere Syntax iter(x).next()
anstelle der neuen verwenden next(iter(x))
, was mir vorzuziehen scheint (und auch in Python 3.1 funktioniert).
Das Auspacken gewinnt jedoch zweifellos über beide:
$ 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
Dies gilt natürlich für Sets mit einem Gegenstand (wobei die letztere Form, wie andere erwähnt haben, den Vorteil hat, schnell zu versagen, wenn der Satz, den Sie "kannten", nur einen Gegenstand hatte, tatsächlich mehrere hatte). Bei Sätzen mit beliebigen N> 1-Elementen verlangsamt sich das Tupel, der Iter nicht:
$ 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
Das Auspacken für den Einzelfall und next(iter(x))
für den allgemeinen Fall scheint also am besten zu sein.