2009-12-10 8 views
5

tengo que hacer lo contrario de estomanera Pythonic para hacer explotar una lista de tuplas

Multiple Tuple to Two-Pair Tuple in Python?

Es decir, tengo una lista de tuplas

[(1,2), (3,4), (5,6)] 

y la necesidad de producir este

[1,2,3,4,5,6] 

Yo personalmente haria esto

>>> tot = [] 
>>> for i in [(1,2), (3,4), (5,6)]: 
...  tot.extend(list(i)) 

pero me gustaría ver algo más elegante.

+0

ouch tot.append (i) - que se extiende por un elemento de la lista, me duele los ojos :-) – Kugel

+0

que se extiende con una lista obtenida de la tupla. Estoy iterando sobre una lista de tuplas. –

+0

eh ... espera un segundo. –

Respuesta

18

La manera más eficiente de hacerlo es la siguiente:

tuples = [(1,2), (3,4), (5,6)] 
[item for t in tuples for item in t] 

salida

[1, 2, 3, 4, 5, 6] 

Aquí es the comparison que hice por varios manera de hacerlo en una pregunta duplicado.

sé que alguien va a proponer esta solución

sum(tuples,()) 

Pero no lo use, se creará una nueva lista de resultados intermedios para cada paso! a menos que no le importe el rendimiento y solo quiera una solución compacta. Para obtener más detalles, consulte Alex's answer

En resumen: la suma es más rápida para las listas pequeñas, pero el rendimiento se degrada significativamente con listas más grandes.

+1

definitivamente muy elegante. –

2
l = [(1,2), (3,4), (5,6)] 
reduce (lambda x,y: x+list(y), l, []) 
+0

Si va por ese camino, 'suma()' es más simple (pero este enfoque crea una gran cantidad de listas intermedias). – tonfa

6
>>> import itertools 
>>> tp = [(1,2),(3,4),(5,6)] 
>>> lst = list(itertools.chain(*tp)) 
>>> lst 
[1, 2, 3, 4, 5, 6] 

Por supuesto, si usted no necesita una lista, sino un iterador, se puede eliminar la llamada list() conversión.

+0

muestra cómo encadenar tres tuplas, no una sola lista que contiene tres tuplas – SilentGhost

+1

O: lst = list (chain.from_iterable (tp)) –

+0

Ya lo edité, pero no eran solo tres tuplas sino una "tupla" de tres tuplas "- ahora cambia a una lista de tuplas ... –

Cuestiones relacionadas