2010-11-06 12 views
60

ich die folgende Liste von Listen zip will:Wie Listen in einer Liste zip

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

Diese nur mit der aktuellen zip Umsetzung erreicht werden könnte, wenn die Liste in einzelne Komponenten aufgeteilt:

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

Kann nicht herausfinden, wie Sie die Liste aufteilen und die einzelnen Elemente an zip übergeben. Eine funktionelle Lösung ist bevorzugt.

Antwort

94

Try this:

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

Unpacking Argument Lists Siehe:

Die umgekehrte Situation tritt auf, wenn die Argumente bereits in einer Liste oder Tupel müssen aber für einen Funktionsaufruf entpackt werden erfordern getrennte Positionsargumente . Die integrierte range() - Funktion erwartet beispielsweise separate Start- und Stoppargumente. Wenn sie nicht separat erhältlich sind, schreiben Sie den Funktionsaufruf mit dem * -Operator die Argumente aus einer Liste oder Tupel auszupacken:

>>> 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] 
+3

http://docs.python.org/tutorial/controlflow See. html # entpacken-argument-lists für wie das funktioniert. – ameer

+0

@ameer: ​​Danke, hinzugefügt. –

+1

Dies ist eine meiner bevorzugten unterbewerteten Python-Funktionen. Nicht oft nützlich, aber so praktisch, wenn Sie es brauchen! – fmark