Mehrdimensionale Felder in Python???

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.
Antworten
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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
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]
Johi
User
Beiträge: 22
Registriert: Sonntag 21. November 2004, 20:08

muss das net heißen:

Code: Alles auswählen

    for n in args[::-1]:
und

Code: Alles auswählen

l = ndlist(None,2,3,4)
?
ich bin noch relativ neu in python, deswegen bin ich mir nicht sicher.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Johi,

stimmt, habs wohl zu schnell getippt :oops:
Hab ndlist jetzt korrigiert.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Johi
User
Beiträge: 22
Registriert: Sonntag 21. November 2004, 20:08

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? :D
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!
Johi hat geschrieben: oder wissen das nur die ganz schlauen?
Nein, ich weiß es auch :D

[::-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
Gruß, mawe
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 ;)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

das mit der dreidimensionalen liste geht so:

Code: Alles auswählen

leere_liste = [[[]]]
Falls es sich um Numerische Werte handelt, solltest Du dir auch das Modul numarray anschauen.
Hier findest Du die Dokumentation.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Danke, das hat mir sehr geholfen.
Gast

Dookie hat geschrieben:das mit der dreidimensionalen liste geht so:

Code: Alles auswählen

leere_liste = [[[]]]
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 ?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

mit Dookies Funktion:

Code: Alles auswählen

array = ndlist(100,100,100)
Gruss
Antworten