Seite 1 von 1
Mehrdimensionale Felder in Python???
Verfasst: Sonntag 2. Januar 2005, 13:22
von Gast
Hi. Ich suche eine Möglichkeit ein mehrdimensionales Feld(z.B. Feld[2][3] (C++)) zu erstellen. Bei allen bisherigen Versuchen bekam ich nur eindimensionale Felder heraus.
Verfasst: Sonntag 2. Januar 2005, 14:13
von Dookie
Hi gast,
Code: Alles auswählen
feld = [[[ 1, 2, 3], [ 4, 5, 6], [ 7 , 8, 9]],
[[10, 11, 12], [13, 14, 15], [16, 17, 18]],
[[19, 20, 21], [22, 23, 24], [25, 26, 27]]]
print feld[2][1][0]
Oder willst du eine vordimensionierte liste mit z.B. None als Elementen, dann gehts am einfachsten über eine kleine Funktion.
Code: Alles auswählen
def ndlist(*args, **kw):
""" call ndlist(dim0, dim1, dim2, ...[, value=initialvalue]) """
res = [kw.pop("value", None)]
for n in args[::-1]:
res = [res[:]*n]
return res[0]
l = ndlist(2,3,4)
print l[1][2][1]
Gruß
Dookie
Verfasst: Sonntag 2. Januar 2005, 23:14
von Johi
muss das net heißen:
und
?
ich bin noch relativ neu in python, deswegen bin ich mir nicht sicher.
Verfasst: Montag 3. Januar 2005, 00:21
von Dookie
Hi Johi,
stimmt, habs wohl zu schnell getippt

Hab
ndlist jetzt korrigiert.
Gruß
Dookie
Verfasst: Montag 3. Januar 2005, 11:25
von Johi
eine Frage hätte ich aber noch:
Offensichtlich bewirkt [::-1], dass die Liste umgedreht wird.
Aber warum benutzt man nicht .reverse()?
Ist Slicing schneller, oder benutzt man es in diesem Fall nur, weil .reverse() keinen Wert zurückliefert und das alles Umständlicher machen würde?
Und Wie kommt man auf [::-1]?
Gibts irgendwo ne Liste, wo solche Tricks stehen, oder wissen das nur die ganz schlauen?

Verfasst: Montag 3. Januar 2005, 11:51
von mawe
Hi!
Johi hat geschrieben:
oder wissen das nur die ganz schlauen?
Nein, ich weiß es auch
[::-1] bewirkt nicht daß die List umgedreht wird, sie wird nur von hinten nach vorne abgearbeitet. Mit
.reverse() wird sie tatsächlich umgedreht.
Seit Python 2.4 kann man auch
reversed() verwenden:
Gruß, mawe
Verfasst: Montag 3. Januar 2005, 13:16
von Gast
Wie geht das wenn man die Liste nicht selbst erstellen möchte, sondern eine fertige liste mit Werten füllt. Mein Problem ist, dass ich nicht weiß wie ich eine leere Liste erzeuge, in die ich hinterher Daten schreiben will. mir würde schon reichen wenn ich ALLE werte auf 0 bekomme ohne jeden einzelnen Wert Niederzutippen
Das ist mir zu umständlich und bläht meinen Code sehr auf da ich eine 3 Demensionale Liste brauche ( C++Array[100][100][100] ) :
Code: Alles auswählen
feld = [[[ 1, 2, 3], [ 4, 5, 6], [ 7 , 8, 9]],
[[10, 11, 12], [13, 14, 15], [16, 17, 18]],
[[19, 20, 21], [22, 23, 24], [25, 26, 27]]]
print feld[2][1][0]
Ich möchte eher so etwas haben :
Code: Alles auswählen
Mein3DArray[100][100][100] = 0 # WIE GEHT SOETWAS ????
Mein3DArray[12][43][22] = 1
print Mein3DArray[12][43][22]
Wie erstelle ich nun ein Leeres Mehrdemensionales Feld ?? Eine Demension bekomme ich ja hin mit :
LeereListe = []
nur Mehrdemensional geht net
LeereListe = [][][] ?? geht nicht
LeereListe = [],[],[] ?? geht auchnet
Ich hoffe ihr versteht was ich meine

Verfasst: Montag 3. Januar 2005, 13:47
von Dookie
das mit der dreidimensionalen liste geht so:
Falls es sich um Numerische Werte handelt, solltest Du dir auch das Modul
numarray anschauen.
Hier findest Du die Dokumentation.
Gruß
Dookie
Verfasst: Mittwoch 5. Januar 2005, 14:44
von Gast
Danke, das hat mir sehr geholfen.
Verfasst: Donnerstag 6. Januar 2005, 08:55
von Gast
Dookie hat geschrieben:das mit der dreidimensionalen liste geht so:
Dookie
Ja danke, das ist schonmal gut zu wissen. Wie kann ich dem dreidimensionalen Array nun sagen, das es 100x100x100 Werte enthalten soll die Alle NULL ( 0 ) sind ?
Verfasst: Donnerstag 6. Januar 2005, 10:05
von rayo
Hi
mit Dookies Funktion:
Gruss
Verfasst: Donnerstag 6. Januar 2005, 10:26
von Gast
JUHU

es geht

*freu* ...