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 *list
en argumentos para crear una lista de parámetros para una función ...
Nota : En Python3, zip
devuelve un iterador, por lo que en su lugar utilícelo list(zip(*elements))
para devolver una lista de tuplas.
**dict
para crear argumentos de palabras clave:def test(foo=3, bar=3): return foo*bar
luegod = {'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
for
está 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
numpy
mé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
islice
ychain.from_iterable
:Esto puede resultar útil cuando necesite más de un elemento:
fuente