2010-11-06 15 views
60

Quiero comprimir la siguiente lista de listas:Cómo comprimir listas en una lista

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

Esto podría lograrse con la corriente zip aplicación sólo si la lista se divide en componentes individuales:

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

No se puede averiguar cómo dividir la lista y pasar los elementos individuales al zip. Se prefiere una solución funcional.

Respuesta

94

Prueba esto:

>>> zip(*[[1,2], [3,4], [5,6]]) 
[(1, 3, 5), (2, 4, 6)] 

Ver Unpacking Argument Lists:

La situación inversa se produce cuando los argumentos ya están en una lista o tupla pero necesitan ser desempaquetado para una llamada a una función que requiere argumentos posicionales separados . Por ejemplo, la función range() incorporada espera argumentos separados de inicio y finalización. Si no están disponibles por separado, escribir la llamada a la función con el * -operator para desempaquetar los argumentos de una lista o tupla:

>>> range(3, 6)    # normal call with separate arguments 
[3, 4, 5] 
>>> args = [3, 6] 
>>> range(*args)   # call with arguments unpacked from a list 
[3, 4, 5] 
+3

Ver http://docs.python.org/tutorial/controlflow. html # desempaquetar-argumentos-listas de cómo funciona esto. – ameer

+0

@ameer: ​​Gracias, agregó. –

+1

Esta es una de mis características de python infravaloradas favoritas. No es muy útil, ¡pero es tan conveniente cuando lo necesitas! – fmark

Cuestiones relacionadas