Jak spakować listy na liście

92

Chcę spakować następującą listę list:

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

Można to osiągnąć przy obecnej zipimplementacji tylko wtedy, gdy lista jest podzielona na poszczególne komponenty:

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

Nie mogę dowiedzieć się, jak podzielić listę i przekazać jej poszczególne elementy zip. Preferowane jest rozwiązanie funkcjonalne.

Vijay Mathew
źródło

Odpowiedzi:

146

Spróbuj tego:

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

Zobacz Rozpakowywanie list argumentów :

Odwrotna sytuacja ma miejsce, gdy argumenty znajdują się już na liście lub krotce, ale muszą zostać rozpakowane dla wywołania funkcji wymagającego oddzielnych argumentów pozycyjnych. Na przykład wbudowana funkcja range () oczekuje oddzielnych argumentów start i stop. Jeśli nie są dostępne osobno, napisz wywołanie funkcji z operatorem *, aby rozpakować argumenty z listy lub krotki:

>>> 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
źródło
4
Zobacz docs.python.org/tutorial/…, aby dowiedzieć się, jak to działa.
ameer
2
Chciałbym zobaczyć alternatywę na wypadek, gdybyś miał listę z milionem wpisów. Może nie być dobrym pomysłem rozpakowanie miliona elementów w wywołaniu funkcji ...
Blixt