So komprimieren Sie Listen in einer Liste

88

Ich möchte die folgende Liste von Listen komprimieren:

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

Dies könnte mit der aktuellen zipImplementierung nur erreicht werden, wenn die Liste in einzelne Komponenten aufgeteilt wird:

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

Ich kann nicht herausfinden, wie die Liste aufgeteilt und die einzelnen Elemente an übergeben werden sollen zip. Eine funktionelle Lösung ist bevorzugt.

Vijay Mathew
quelle

Antworten:

142

Versuche dies:

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

Siehe Auspacken von Argumentlisten :

Die umgekehrte Situation tritt auf, wenn sich die Argumente bereits in einer Liste oder einem Tupel befinden, aber für einen Funktionsaufruf entpackt werden müssen, der separate Positionsargumente erfordert. Beispielsweise erwartet die integrierte Funktion range () separate Start- und Stoppargumente. Wenn sie nicht separat verfügbar sind, schreiben Sie den Funktionsaufruf mit dem * -Operator, um die Argumente aus einer Liste oder einem Tupel zu entpacken:

>>> 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
quelle
2
Ich würde gerne eine Alternative sehen, falls Sie eine Liste mit einer Million Einträgen haben. Es ist möglicherweise keine gute Idee, eine Million Elemente in einem Funktionsaufruf auszupacken ...
Blixt