Seite 1 von 1

dreidimensionale Listen ohne verschachtelte for Schleifen?

Verfasst: Montag 4. Juni 2007, 22:10
von seson
Hallo Leute,

ich habe ein dreidimensionales Array (d.h. eine Liste) und möchte alle Werte einsammeln, die in der dritten Dimension zu allen Werten von 1. und 2. Dimension gespeichert sind.

Beispiel:

Werte[x][y][z]

Und ich will in einer Liste alle Werte haben, wo x und y beliebig und z = 5 ist.

Mit for-Schleifen sieht das so aus:

Code: Alles auswählen

for x in Werte:
  for y in x:
    print y[5]
Das muss doch einfacher gehen oder?

In meinem Szenario handelt es sich zwar um ein Dictionary, aber ich denke das läuft auf's Gleiche hinaus.

Gruß,
Sebastian

Verfasst: Montag 4. Juni 2007, 23:13
von veers

Code: Alles auswählen

data = [[['1', '2'], ['3', '4']], [['5', '6'], ['7', '8']]]
map(lambda e: map(lambda ee: sys.stdout.write(ee[0]+"\n"), e), data)
1
3
5
7
;)

Ob das nun wirklich hübscher ist wage ich zu bezweifeln..

Edit:
Als List Comprehension

Code: Alles auswählen

[[sys.stdout.write(ee[0]) for ee in e] for e in data]
[/code]

Damit sparst du zwar 2 Zeilen Code aber leserlicher/schöner wird es dadurch meiner Meinung nach nicht.

Verfasst: Montag 4. Juni 2007, 23:50
von BlackJack
Beide Lösungen sind nicht schön, weil Listen erstellt werden, die gar nicht verwendet werden. `map()` und "list comprehension" sollte man dafür nicht missbrauchen, sondern nur, wenn wirklich eine Liste erzeugt werden soll, die danach auch verwendet wird.

Zur Frage: Nein, wie sollte das einfacher gehen wenn die Datenstruktur so verschachtelt vorliegt.

Vielleicht kann man die Daten anders speichern, damit es einfacher geht. Zum Beispiel in nur zwei Dictionaries mit den ersten beiden Koordinaten als Schlüssel, also so: Werte[x, y][z], dann ist es mit einer Schleife oder "list comprehension" machbar.