2012-06-07 22 views
28

¿Cómo convierto¿Convertir la lista de tuplas a la lista?

[(1,), (2,), (3,)] 

a

[1, 2, 3] 
+0

Posible duplicado de [python - obtener lista de tuplas primer índice?] (Https://stackoverflow.com/questions/10735282/python-get-list-of-tuples-first-index) –

Respuesta

40

@ Le La solución de von funciona a la perfección para su caso.

Como nota al margen, si tiene un número variable de elementos en las tuplas, también puede usar chain desde itertools.

>>> a = [(1,), (2, 3), (4, 5, 6)] 
>>> from itertools import chain 
>>> list(chain(a)) 
[(1,), (2, 3), (4, 5, 6)] 
>>> list(chain(*a)) 
[1, 2, 3, 4, 5, 6] 
>>> list(chain.from_iterable(a)) # More efficient version than unpacking 
[1, 2, 3, 4, 5, 6] 
+10

También hay 'chain.from_iterable() 'que hace el desempaquetado para usted. – stranac

+0

¡Gracias por la pista! – fanti

7
>>> a = [(1,), (2,), (3,)] 
>>> zip(*a)[0] 
(1, 2, 3) 

Para obtener una lista:

>>> list(zip(*a)[0]) 
[1, 2, 3] 
+1

@Levon - ¡Aunque me parece más fácil de leer la lista de tareas! – fraxel

+2

Estoy más familiarizado y cómodo con él también, pero estoy tratando de aprender más sobre zip e itertools, así que esto es instructivo :) – Levon

+1

@Levon - sabios movimientos;) – fraxel

19

Aquí es otra alternativa si se puede tener un número variable de elementos en las tuplas:

>>> a = [(1,), (2, 3), (4, 5, 6)] 
>>> [x for t in a for x in t] 
[1, 2, 3, 4, 5, 6] 

Ésta es básicamente una forma abreviada de los siguientes circuitos:

result = [] 
for t in a: 
    for x in t: 
     result.append(x) 
+0

La mejor respuesta de lejos, muy conciso/generalizable. Pero la sintaxis es bastante alucinante. ¿Es esa última declaración 'for' análoga a una instrucción' if' posterior en una lista de comprensión, p. '[i para i en el rango (10) si i% 2 == 0]'? Estoy familiarizado con esto último. –

1

También puede desempaquetar la tupla en la lista de la comprensión:

e = [(1,), (2,), (3,)] 
[i for (i,) in e] 

se siguen dando:

[1, 2, 3] 
3

siempre hay una manera de extraer una lista de otra lista por ... for ... in .... En este caso sería:

[i[0] for i in e]

3

También puede utilizar sum función como sigue:

e = [(1,), (2,), (3,)] 
e_list = list(sum(e,())) 

y también trabaja con la lista de listas para convertirlo en una única lista, pero tendrá que usarlo de la siguiente manera:

e = [[1, 2], [3, 4], [5, 6]] 
e_list = list(sum(e, [])) 

Esto le dará [1, 2, 3, 4, 5, 6]

0

un trazador de líneas yo!

list(*zip(*[(1,), (2,), (3,)])) 
1
>>> a = [(1,), (2,), (3,)] 
>>> b = map(lambda x: x[0], a) 
>>> b 
[1, 2, 3] 

Esta es la mejor solución en una línea usando Python funciones integradas

0

Uso de operador o resumir

>>> import operator 
>>> a = [(1,), (2,), (3,)] 
>>> list(reduce(operator.concat, a)) 
[1, 2, 3] 

(OR)

>>> list(sum(a,())) 
[1, 2, 3] 
>>> 
Cuestiones relacionadas