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.

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]

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.