it-swarm.com.de

Wie entpacke ich eine Liste von Tupeln in einzelne Listen?

Mögliches Duplikat:
Eine Transponierungs-/Entpackungsfunktion in Python

Ich habe eine Liste von Tupeln, in die ich diese Liste in zwei unabhängige Listen entpacken möchte. Ich suche eine standardisierte Operation in Python.

>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ] 

Ich suche einen prägnanten und pythonischen Weg, um dies zu erreichen.

Grundsätzlich bin ich auf der Suche nach der inversen Operation von Zip() function.

204
VaidAbhishek

Benutze Zip(*list):

>>> l = [(1,2), (3,4), (8,9)]
>>> list(Zip(*l))
[(1, 3, 8), (2, 4, 9)]

Die Funktion Zip() verbindet die Elemente aller Eingaben, beginnend mit den ersten Werten, dann den zweiten usw. Mit *l Können Sie anwenden) alle Tupel in l als separate Argumente für die Zip() function , also Zip() verbindet 1 zuerst mit 3 mit 8, dann 2 mit 4 und 9. Diese stimmen gut mit den Spalten oder der Transposition von l überein.

Zip() erzeugt Tupel; Wenn Sie veränderbare Listenobjekte haben müssen, verwenden Sie einfach map() die Tupel, um Listen zu erstellen, oder verwenden Sie ein Listenverständnis, um eine Liste von Listen zu erstellen:

map(list, Zip(*l))          # keep it a generator
[list(t) for t in Zip(*l)]  # consume the Zip generator into a list of lists
349
Martijn Pieters

Wenn Sie eine Liste von Listen möchten:

>>> [list(t) for t in Zip(*l)]
[[1, 3, 8], [2, 4, 9]]

Wenn eine Liste von Tupeln in Ordnung ist:

>>> Zip(*l)
[(1, 3, 8), (2, 4, 9)]
81
user647772