Seite 1 von 1

Listen-Zugriff

Verfasst: Mittwoch 21. November 2007, 17:53
von Dakre
Hallo,
ich habe eine kurze Frage ;) ich habe eine Liste der folgenden Art:

Code: Alles auswählen

a = [ [ 1, 2, 3], [ 'a', 'b', 'c' ], [ 4, 5, 6 ], [ 7, 8, 9]]
und möchte nun gern vom 2. und 3. Element in der Liste jeweils das zweite Element in einer neuen Liste haben... mit einer For Schleife oder ähnlichem wäre es kein Problem, aber gibt es eine kürzere Schreibweise?

hatte an soetwas wie

Code: Alles auswählen

a[1:3][1]
gedacht... aber, was ich da bekomme ist [4,5,6]... eigentlich auch logisch ;) nur anders interpretiert, als ich das habe... ;)

vielen Dank im Voraus... hab in letzter Zeit wohl zu wenig mit Python gemacht und mich zu sehr an den Matlab Syntax gewöhnt... ;)

Verfasst: Mittwoch 21. November 2007, 18:02
von BlackJack
Bei solchen Fragen ist es oft hilfreich ein Beispiel zu geben wie das Ergebnis aussehen soll. Ich hoffe ich hab's richtig interpretiert:

Code: Alles auswählen

In [110]: a = [[1, 2, 3], ['a', 'b', 'c'], [4, 5, 6], [7, 8, 9]]

In [111]: [x[1] for x in a[1::2]]
Out[111]: ['b', 8]
Edit: Ansonsten kann man natürlich auch `numpy` bemühen, allerdings halte ich das für so kleine Listen und allgemeine Objekte nicht unbedingt für das geeignete Mittel.

Code: Alles auswählen

In [122]: b = numpy.array(a, dtype=object)

In [123]: b[1::2,1]
Out[123]: array([b, 8], dtype=object)

Verfasst: Mittwoch 21. November 2007, 18:11
von Dakre
also [b,5] wäre in diesem Fall das, was ich mir gewünscht hätte...

also

Code: Alles auswählen

[x[1] for x in a[1:3]]
aber am liebsten ohne for sondern irgendwie in einer netten Vektorschreibweise...

aber die Schreibweise sieht ja schon recht hübsch aus ;)

in Matlab ginge es beispielsweise mit a( 1:3,1)... wenn das mal nicht schick ist... ;)
habe gehört, dass numpy versucht dem nahezukommen? mit seiner array-klasse? geht es auch anders, oder braucht man die? und wenn man sie braucht, wie funktioniert es mit ihr? :)

Vielen Dank schonmal!

EDIT: ah, ok... meine zweite Frage hast du schonmal in deinem Edit beantwortet! vielen Dank! aber ohne for geht es mit den normalen Listen also nicht?

Verfasst: Mittwoch 21. November 2007, 18:43
von BlackJack
Du kannst das ``for`` natürlich in mit `map()` verstecken, aber letztendlich *muss* ja irgendwo eine Schleife ausgeführt werden.

Code: Alles auswählen

In [128]: from operator import itemgetter

In [129]: map(itemgetter(1), a[1:3])
Out[129]: ['b', 5]

Verfasst: Mittwoch 21. November 2007, 18:59
von Dakre
alles klar ;) vielen Dank! hast mir sehr geholfen...

Verfasst: Mittwoch 21. November 2007, 19:04
von BlackJack
Du kannst Dir natürlich auch eine eigene `Array`-Klasse basteln, die dann die `numpy`-Notation unterstützt.