2009-03-20 26 views
4

Wenn ich eine Liste wie diese haben:Extract Array aus der Liste in Python

>>> data = [(1,2),(40,2),(9,80)]

wie kann ich die die beiden Listen [1,40,9] und [2,2,80] extrahieren? Natürlich kann ich die Zahlen selbst iterieren und extrahieren, aber ich denke, es gibt einen besseren Weg?

+1

Dies ist nicht "Extraktion". Dies wird manchmal als "Pivot" bezeichnet. Sie ändern die Struktur Ihrer Liste und extrahieren keine Teilmenge daraus. –

Antwort

14

speichern Liste Comprehensions den Tag:

first = [x for (x,y) in data] 
second = [y for (x,y) in data] 
26

Der unzip Betrieb ist:

In [1]: data = [(1,2),(40,2),(9,80)] 
In [2]: zip(*data) 
Out[2]: [(1, 40, 9), (2, 2, 80)] 

Edit: Sie können die Ergebnisliste auf Zuordnung zerlegen:

In [3]: first_elements, second_elements = zip(*data) 

Und wenn Sie wirklich brauchen Listen als Ergebnisse:

In [4]: first_elements, second_elements = map(list, zip(*data)) 

Um besser zu verstehen, warum dies funktioniert:

zip(*data) 

zu

zip((1,2), (40,2), (9,80)) 

Die beiden Tupeln in der Ergebnisliste entspricht von den ersten Elementen der Reißverschluss gebaut() 's Argumente und von den zweiten Elementen der Argumente von zip().

5

Es gibt auch

In [1]: data = [(1,2),(40,2),(9,80)] 
In [2]: x=map(None, *data) 
Out[2]: [(1, 40, 9), (2, 2, 80)] 
In [3]: map(None,*x) 
Out[3]: [(1, 2), (40, 2), (9, 80)] 
Verwandte Themen