entre hacer una tupla y haciendo un iterador, es casi un lavado, pero gana iteración por una nariz ...:
$ 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
No
seguro de por qué todas las respuestas están utilizando la sintaxis anterior iter(x).next()
en lugar de la nuevo next(iter(x))
, que me parece preferible (y también funciona en Python 3.1).
Sin embargo, victorias desembalaje de las manos hacia abajo sobre ambos:
$ 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
Por supuesto, esto es para los conjuntos de un solo artículo (donde la última forma, como otros han dicho, tiene la ventaja de no ayuno si el conjunto que "Sabía" que solo había un objeto en realidad tenía varios). Para los conjuntos arbitrarios con N> 1 materiales, la tupla se ralentiza, el ITER no:
$ 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
Así, desembalaje para el caso único, y next(iter(x))
para el caso general, parece mejor.
muy agradable! Me gusta que esto falle si la cantidad de elementos no es 1. –
@Laurence: es una buena observación. Captura errores temprano, ¿verdad? – u0b34a0f6ae
O, si quiere pretender que Python tiene un operador adecuado para el trabajo (sus compañeros de trabajo lo odiarán): 'element, = myset' – rdb