Listen-Zugriff

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.
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Listen-Zugriff

Beitragvon Dakre » Mittwoch 21. November 2007, 17:53

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... ;)
BlackJack

Beitragvon BlackJack » Mittwoch 21. November 2007, 18:02

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)
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Beitragvon Dakre » Mittwoch 21. November 2007, 18:11

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?
BlackJack

Beitragvon BlackJack » Mittwoch 21. November 2007, 18:43

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]
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Beitragvon Dakre » Mittwoch 21. November 2007, 18:59

alles klar ;) vielen Dank! hast mir sehr geholfen...
BlackJack

Beitragvon BlackJack » Mittwoch 21. November 2007, 19:04

Du kannst Dir natürlich auch eine eigene `Array`-Klasse basteln, die dann die `numpy`-Notation unterstützt.

Wer ist online?

Mitglieder in diesem Forum: /me