Cómo comprimir listas en una lista

91

Quiero comprimir la siguiente lista de listas:

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

Esto se podría lograr con la zipimplementación actual solo si la lista se divide en componentes individuales:

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

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

Vijay Mathew
fuente

Respuestas:

146

Prueba esto:

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

Consulte Desembalaje de listas de argumentos :

La situación inversa ocurre cuando los argumentos ya están en una lista o tupla pero necesitan ser descomprimidos para una llamada de función que requiere argumentos posicionales separados. Por ejemplo, la función incorporada range () espera argumentos de inicio y detención separados. Si no están disponibles por separado, escriba la llamada a la función con el operador * para descomprimir 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]
Mark Byers
fuente
4
Consulte docs.python.org/tutorial/… para ver cómo funciona esto.
2010
2
Me gustaría ver una alternativa en caso de que tenga una lista con un millón de entradas. Puede que no sea una buena idea descomprimir un millón de elementos en una llamada de función ...
Blixt