array zur laufzeit erzeugen

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
dac
User
Beiträge: 7
Registriert: Freitag 1. Juni 2007, 09:25

kennt jemand eine Möglichkeit Arrays während der Laufzeit zu erzeugen?
Mein Problem ist das ich während der Laufzeit aus einer Datei Daten auslese und diese verarbeiten will. In dieser Datei steht unter anderem wieviele Arrays ich benötige, diese speicher ich zur Zeit in einer Variable "anzahlarray" und diese Anzahl kann stark variieren.
Meine erste Idee ging in folgende Richtung:

Code: Alles auswählen

arrayindex = 1
   while arrayindex <= anzahlarray:
   self.array(arrayindex) = []
   arrayindex += 1

Variante zwei:

Code: Alles auswählen

if anzahlarray = 1:
   self.array1 = []
elif anzahlarray = 2:
   self.array1 = []
   self.array2 = []
elif anzahlarray = 3:
   self.array1 = []
   self.array2 = []
   self.array3 = []
.
.
.
zweites ist natürlich eine sehr schlechte Lösung allerdings komme ich bei der ersten auch nicht wirklich weiter...[/quote]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Falls Du wirklich die Arrays aus dem Modul array meinst, dann z.B. so:

Code: Alles auswählen

from array import array
array_list = [array('l')  for i in range(array_anzahl)] # Oder anderer Datentyp
Wenn Du stattdessen mit Array Pythonlisten meinst, dann vielleicht so:

Code: Alles auswählen

array_list = [[] for i in range(array_anzahl)]
MfG
HWK
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Hallo dac!


Du könntest das ganze auch mit einem Dictionary umsetzen:
So kannst du via Index auf alles zugreifen. Wobei das blödsinn ist, wie ich gerade feststelle. Aber falls du andere Bezeichner der einzelnen Listen meinst, macht meins doch sinn :=)

Code: Alles auswählen

ai = 1  #: dynamisch aus der eingelesenen Datei zu gewiesen
mydict = {}
for i in xrange(ai):
    mydict[i] = []
Vielleicht hilft dir das weiter.


MfG EnTEQuAk
dac
User
Beiträge: 7
Registriert: Freitag 1. Juni 2007, 09:25

Erstmal danke für die schnellen Antworten.


@HWK

ich hab grade mal in meinem Schlauen Buch nachgeschlagen und es Handelt sich tatsächlich nicht um Arrays sondern um Listen.

Aber das geht schon in die richtige Richtung, allerdings muss ich gestehen das ich nicht Hundertprozentig verstehe was genau Du erzeugst.
Für mich sieht das ganze aus wie ein Array mit definierter Größe oder liege ich da falsch?
Wie spreche ich die einzelnen Arrays an, weil fortlaufende Namen hast Du ja nicht verwendet oder?

Was ich brauche sind mehrere Arrays oder Listen die ich dann mit append oder ähnlichen Funktionen(weiss nicht ob Append und Arrays zusammen arbeiten) füllen möchte.


@ EnTeQuAk

im Grunde ein sehr guter Ansatz, aber ich habe vergessen zu erwähnen das es nicht nur um das Speicher geht sondern um komplexe Berechnungen die im späteren verlauf des Programms durchgeführt werden. Diese sind leider mit einem Dictionary nicht realisierbar, zumindest nicht nachdem was ich bis jetzt über Dictionarys gelesen habe.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das Stichwort heißt list-comprehension. Man könnte stattdessen auch schreiben:

Code: Alles auswählen

array_list = []
for array_index in range(array_anzahl):
    array_list.append([])
Zugriff erfolgt dann z.B. schreibend so:

Code: Alles auswählen

array_list[i].append(x)
oder lesend so:

Code: Alles auswählen

x = array_list[i][j]
MfG
HWK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

dac hat geschrieben:kennt jemand eine Möglichkeit Arrays während der Laufzeit zu erzeugen?
Hallo dac!

Willkommen im Python-Forum!

Ich gehe jetzt mal davon aus, dass du nicht Arrays sondern Listen meinst.

Du kannst diese Listen z.B. in einer Liste ablegen und damit arbeiten. -- Du kannst dir deine Listen dynamisch (zur Laufzeit) erweitern.

mfg
Gerold
:-)

Edit: Beitrag gekürzt
Zuletzt geändert von gerold am Mittwoch 29. August 2007, 11:47, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
dac
User
Beiträge: 7
Registriert: Freitag 1. Juni 2007, 09:25

perfekt HWK genau das ist es was ich brauche :-)
danke sehr

@ gerold

danke, lesen tu ich hier öffter war aber jetzt mein erster post :-)
BlackMamba
User
Beiträge: 77
Registriert: Samstag 24. März 2007, 23:22
Wohnort: Germany,NRW,

Hallo, ich habe mir auch mal diesen Thread durchgelesen.



@HWK:
Und zwar habe ich ne Frage zu der folgenden Zeile:

x = array_list[j]

Durch die Verwendung von [j],kann ich so auch ein ZweiDemensionales Array erzeugen? Also so:

array_list[j].append(x)

und wie macht man das dann in einer for Schleife? Also bei dem Besispiel was du angegeben hast?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackMamba hat geschrieben:und wie macht man das dann in einer for Schleife? Also bei dem Besispiel was du angegeben hast?
Verschachtelt natürlich:

Code: Alles auswählen

array_list = list()
for array_index_outer in range(array_anzahl):
    curlist = list()
    for array_index_inner in range(array_anzahl):
        curlist.append(list())
    array_list.append(curlist)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
dac
User
Beiträge: 7
Registriert: Freitag 1. Juni 2007, 09:25

Ich habe das jetzt mal umgesetzt und muss sagen es funktioniert wunderbar, danke nochmal für die super Hilfe!


ps. hab sofort wieder neue Fragen im Kopf, vielleicht komm ich also bald schon wieder ;-)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

BlackMamba hat geschrieben:Durch die Verwendung von [j],kann ich so auch ein ZweiDemensionales Array erzeugen? Also so:

array_list[j].append(x)
Dadurch erzeugst Du sogar ein dreidimensionales Array.
i = Index für 1. Dimension
j = Index für 2. Dimension
append fügt etwas zu einer Liste (Dimension) in der 2. Dimension zu, d.h. arbeitet in der 3. Dimension.
MfG
HWK
Antworten