Mehrdimensionale Felder in Python???
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.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi gast,
Oder willst du eine vordimensionierte liste mit z.B. None als Elementen, dann gehts am einfachsten über eine kleine Funktion.
Gruß
Dookie
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]
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
Zuletzt geändert von Dookie am Montag 3. Januar 2005, 00:19, insgesamt 1-mal geändert.
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
muss das net heißen:
und
?
ich bin noch relativ neu in python, deswegen bin ich mir nicht sicher.
Code: Alles auswählen
for n in args[::-1]:
Code: Alles auswählen
l = ndlist(None,2,3,4)
ich bin noch relativ neu in python, deswegen bin ich mir nicht sicher.
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?
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?
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
[::-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
Nein, ich weiß es auchJohi hat geschrieben: oder wissen das nur die ganz schlauen?
[::-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:
Code: Alles auswählen
x = [1,2,3]
for i in reversed(x):
print i, # -> 3 2 1
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] ) :
Ich möchte eher so etwas haben :
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
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]
Code: Alles auswählen
Mein3DArray[100][100][100] = 0 # WIE GEHT SOETWAS ????
Mein3DArray[12][43][22] = 1
print Mein3DArray[12][43][22]
LeereListe = []
nur Mehrdemensional geht net
LeereListe = [][][] ?? geht nicht
LeereListe = [],[],[] ?? geht auchnet
Ich hoffe ihr versteht was ich meine
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
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
Code: Alles auswählen
leere_liste = [[[]]]
Hier findest Du die Dokumentation.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
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 ?Dookie hat geschrieben:das mit der dreidimensionalen liste geht so:DookieCode: Alles auswählen
leere_liste = [[[]]]