2010-01-13 8 views
11

Digamos que tengo un conjunto de tuplas, s, en forma de:Obteniendo los primeros elementos por fila en una matriz en Python?

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234)) 

y quiero volver otra tupla, t, que consiste en el primer elemento por fila:

t = (1, 2, 3) 

¿Cuál sería el método más eficiente para hacer esto? Por supuesto, podría simplemente iterar a través de s, pero ¿hay alguna manera más astuta de hacerlo?

Respuesta

22

No.

t = tuple(x[0] for x in s) 
5

El método de la lista comprensión propuesta por Ignacio es el más limpio.

Sólo por diversión, también se puede hacer:

zip(*s)[0] 

*s expande s en una lista de argumentos. Por lo que es equivalente a

zip((1, 23, 34),(2, 34, 44), (3, 444, 234)) 

Y zip vuelve n tuplas, donde cada tupla contiene el elemento nth de cada lista.

+2

En realidad, esa es una expresión del generador, no una comprensión de la lista. –

1
import itertools 
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234)) 
print(next(itertools.izip(*s))) 

itertools.izip devuelve un iterador. La función next devuelve el siguiente elemento (y en este caso, primero) del iterador.

En Python 2.x, zip devuelve una tupla. izip usa menos memoria ya que los iteradores no generan sus contenidos hasta que sea necesario.

En Python 3, zip devuelve un iterador.

Cuestiones relacionadas