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.

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]


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.