Nur bestimme Elemente aus Nested List auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
haseluenne
User
Beiträge: 2
Registriert: Dienstag 7. Februar 2012, 00:18

Hallo! Wenn ich eine nested list nach dem Schema

Code: Alles auswählen

a=[[1,2,3],[4,5,6],[7,8,9]]
habe, wie komme ich dann an die jeweils nullten Elemente der inneren Listen dran, sprich 1,4,6; 2,5,8 usw.?

Habe es (für die ersten Elemente) mit z.B.

Code: Alles auswählen

a[0:2][1]
versucht, aber das liefert mir

Code: Alles auswählen

[4,5,6]
?

Bin echt ratlos was der da anstellt sobald man zweidimensional nen Bereich mit Doppelpunkten angibt, wenn man nur Einzelzahlen eingibt ala

Code: Alles auswählen

a[1][1]
liefert er mir anstandslos jeden skalaren Wert an jeder Position.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Wie wär's mit einer Schleife oder List Comprehension à la

Code: Alles auswählen

In [4]: [elem[0] for elem in a]
Out[4]: [1, 4, 7]

In [5]: [elem[1] for elem in a]
Out[5]: [2, 5, 8]

In [6]: [elem[2] for elem in a]
Out[6]: [3, 6, 9]
Anstatt in Zukunft zu raten was du machst, kannst du beim slicing Zwischenschritte ausgeben à la

Code: Alles auswählen

In [7]: a[0:2]
Out[7]: [[1, 2, 3], [4, 5, 6]]

In [8]: a[0:2][1]
Out[8]: [4, 5, 6]
Grüße,
anogayales
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Code: Alles auswählen

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> zip(*a)[0]
(1, 4, 7)
>>> zip(*a)[1]
(2, 5, 8)
>>> zip(*a)[2]
(3, 6, 9)
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

operator.itemgetter

kleines Beispiel:

Code: Alles auswählen

>>> a=[[1,2,3],[4,5,6],[7,8,9]]
>>> from operator import itemgetter
>>> map(itemgetter(0), a)
[1, 4, 7]
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Nur der Vollständigkeit halber :D Nicht ernst zu nehmen :P

Code: Alles auswählen

>>> a=[[1,2,3],[4,5,6],[7,8,9]]
>>> map(lambda a:a[0], a)
[1, 4, 7]
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

Mit numpy :lol:

Code: Alles auswählen

>>> import numpy
>>> a = numpy.asarray([[1,2,3],[4,5,6],[7,8,9]])
>>> a[:,0]
array([1, 4, 7])
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Das ist doch alles viel zu umständlich.

Code: Alles auswählen

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list(next(value for value in sublist) for sublist in a)
[1, 4, 7]
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

haseluenne hat geschrieben: Bin echt ratlos was der da anstellt sobald man zweidimensional nen Bereich mit Doppelpunkten angibt
Hallo! Dein Problem war, dass du mit den Doppelpunkten erneut eine nested Liste erzeugt hattest. Kann nur unterschreiben, wie hilfreich ein häufiges print beim debuggen sein kann.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

/me hat geschrieben:Das ist doch alles viel zu umständlich.

Code: Alles auswählen

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list(next(value for value in sublist) for sublist in a)
[1, 4, 7]
Das geht auch unumständlicher:

Code: Alles auswählen

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list(next(iter(sublist)) for sublist in a)
[1, 4, 7]
Antworten