Seite 1 von 1

struct - Daten

Verfasst: Donnerstag 9. Februar 2006, 15:04
von Poseidonius
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

Verfasst: Donnerstag 9. Februar 2006, 15:35
von jens

Verfasst: Donnerstag 9. Februar 2006, 16:09
von Mad-Marty
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")

Arrays in Listen

Verfasst: Sonntag 12. Februar 2006, 13:22
von Poseidonius
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

Verfasst: Sonntag 12. Februar 2006, 13:42
von raist1314
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

Verfasst: Sonntag 12. Februar 2006, 13:58
von Poseidonius
yapp, Du hast recht ... zudem auch besser lesbar.

Danke

Re: Arrays in Listen

Verfasst: Montag 13. Februar 2006, 00:35
von 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.

Kopie eines Arrays

Verfasst: Dienstag 14. Februar 2006, 08:36
von Poseidonius
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

Re: Kopie eines Arrays

Verfasst: Dienstag 14. Februar 2006, 10:11
von 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.

methods mit und ohne Klammern

Verfasst: Dienstag 14. Februar 2006, 12:19
von Poseidonius
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