Esto también funciona:
zip(*elements)[1]
(Principalmente estoy publicando esto, para demostrarme a mí mismo que he asimilado zip...)
Véalo en acción:
>>> help(zip)
Ayuda sobre la función incorporada zip en el módulo incorporado :
Código Postal(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Devuelve una lista de tuplas, donde cada tupla contiene el elemento i-ésimo de cada una de las secuencias de argumentos. La lista devuelta se trunca a la longitud de la secuencia de argumentos más corta.
>>> elements = [(1,1,1),(2,3,7),(3,5,10)]
>>> zip(*elements)
[(1, 2, 3), (1, 3, 5), (1, 7, 10)]
>>> zip(*elements)[1]
(1, 3, 5)
>>>
Lo bueno que aprendí hoy: usar *listen argumentos para crear una lista de parámetros para una función ...
Nota : En Python3, zipdevuelve un iterador, por lo que en su lugar utilícelo list(zip(*elements))para devolver una lista de tuplas.
**dictpara crear argumentos de palabras clave:def test(foo=3, bar=3): return foo*barluegod = {'bar': 9, 'foo'=12}; print test(**d)Hay otra forma. También puedes hacerlo con map y itemgetter :
Sin embargo, esto todavía realiza un bucle internamente y es un poco más lento que la comprensión de la lista:
Resultados:
Si necesita iterar sobre una lista, entonces
forestá bien usar a .fuente
Encontré esto mientras buscaba cuál es la forma más rápida de extraer el segundo elemento de una lista de 2 tuplas. No es lo que quería, pero ejecuté la misma prueba que se muestra con un tercer método más probar el método zip
Entonces, más del doble de rápido si tiene un par de 2 tuplas para convertirlo en un dict y tomar los valores.
fuente
dict(elements).values()que resultará en un dict de un elemento en lugar de una lista de comprahension o map. Esto es exactamente lo que quería (estaba interesado en parejas únicas) (+1 y muchas gracias por publicar), pero otros podrían preguntarse por qué dict es más rápido: no está asignando memoria sino solo verificando el elemento existente.Tiempos de Python 3.6 para extraer el segundo elemento de una lista de 2 tuplas.
Además, se agregó el
numpymétodo de matriz, que es más simple de leer (pero posiblemente más simple que la comprensión de la lista).y los tiempos:
Tenga en cuenta eso
map()yzip()ya no devuelva una lista, de ahí la conversión explícita.fuente
fuente
Usando
isliceychain.from_iterable:Esto puede resultar útil cuando necesite más de un elemento:
fuente