struct - Daten

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
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

Hi,

sorry wenn das jetzt ganz daneben ist ... aber ich bastle schon seit Tagen und bekomme keine Loesung gebacken ..

Ich moechte gern eine Datenstruktur wie Schueler.name, Schueler.alter ... in einen Vektor stopfen, so dass ich auf mehrere Schueler in diesem Konstrukt so ungefaehr mit

Schueler[1].name = "Mueller"
Schueler[1].alter = 14
Schueler[2].name = "Maier" ...

zugreifen kann. Wer hilft mir auf die Spruenge?

Danke
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Da bietet sich eine liste mit mappings an ....


also :

Code: Alles auswählen

mylist = []
a = {"name" : "Meier"}
b = {"name" : "Muster"}
mylist.append(a)
mylist.append(b)


print mylist[1].get("name")
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

Hi,

danke euch erst mal. Nun habe ich aber das Problem, das eines meiner Elemente ein Array ist, dass offensichtlich als Referenz an die Liste übergeben wird - was eigentlich nicht so sein sollte.

Code: Alles auswählen

 list=[]
element=array([1,2,3])
list.append(element)
element[2]=99
list.append(element)
print list 
und nun steht nicht wie erwartet
[1,2,3],[1,2,99]
da sondern
[1,2,99],[1,2,99]
Was muß ich tun, damit der Wert und keine Referenz übergeben wird.

Danke und schönen Sonntag
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Hi,

warum machst Du keine Klasse draus?

Code: Alles auswählen

class Person:
    def __init__(self, name, alter):
        self.name = name
        self.alter = alter

# liste von schuelern
schueler = []
schueler.append(Person("Walter Mustermann", 5))
schueler.append(Person("ein name", 9))

for s in schueler:
    print s.name
gruss

Sebastian
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

yapp, Du hast recht ... zudem auch besser lesbar.

Danke
BlackJack

Poseidonius hat geschrieben:danke euch erst mal. Nun habe ich aber das Problem, das eines meiner Elemente ein Array ist, dass offensichtlich als Referenz an die Liste übergeben wird - was eigentlich nicht so sein sollte.
Das liegt nicht am Array, sondern daran das in Python nur Referenzen auf Objekte zugewiesen werden. Egal um welchen Objekt-Typ es sich handelt. Wenn man ein neues Objekt, also eine Kopie haben möchte, dann muss man dafür schon selbst sorgen.
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

Ok, und wie stelle ich das an?
Ich habe eine Klasse angelegt

Code: Alles auswählen

from scipy import *
class calculations:
    def __init__(self,Matrix):
        self.Matrix=Matrix
und lege Instanzen davon in einer Liste ab

Code: Alles auswählen

 Steps=[]
x=array([1,2,3,4])  
Steps.append(calculations(x[:].copy)
dann bekomme ich fuer die Abfrage

Code: Alles auswählen

Steps[-1].Matrix
die Fehlermeldung
build-in method copy of array object
Also habe ich die Idee des .copy falsch verstanden, wer kann mir helfen?
Danke Euch
BlackJack

Poseidonius hat geschrieben:

Code: Alles auswählen

 Steps=[]
x=array([1,2,3,4])  
Steps.append(calculations(x[:].copy)
dann bekomme ich fuer die Abfrage

Code: Alles auswählen

Steps[-1].Matrix
die Fehlermeldung
build-in method copy of array object
Das ist keine Fehlermeldung. So sieht eine Methode aus wenn man sie ausgibt. Du möchtest aber nicht die Methode an die Liste anhängen, sondern das Ergebnis eines Aufrufs dieser Methode. Für einen Aufruf brauchts immer Klammern. Also ``print foo.method`` gibt die Methode aus, ``print foo.method()`` ruft die Methode auf und gibt das Ergebnis aus.

Wobei ich mich frage ob ``x[:]`` nicht schon ausreicht um eine Kopie zu erzeugen. Allerdings würde ich ``x.copy()`` bevorzugen weil dann deutlicher ist, was da passiert. Aber das ist Geschmackssache.
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

Vielen Dank, der Hinweis hat mir weitergeholfen, nun verstehe ich auch was mein Buch mir zu diesem Thema copy und copy() sagen moechte.

Gruesse

Poseidonius
Antworten