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

struct - Daten

Beitragvon Poseidonius » Donnerstag 9. Februar 2006, 15:04

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 9. Februar 2006, 15:35


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

Beitragvon Mad-Marty » Donnerstag 9. Februar 2006, 16:09

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

Arrays in Listen

Beitragvon Poseidonius » Sonntag 12. Februar 2006, 13:22

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:

Beitragvon raist1314 » Sonntag 12. Februar 2006, 13:42

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

Beitragvon Poseidonius » Sonntag 12. Februar 2006, 13:58

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

Danke
BlackJack

Re: Arrays in Listen

Beitragvon BlackJack » Montag 13. Februar 2006, 00:35

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

Kopie eines Arrays

Beitragvon Poseidonius » Dienstag 14. Februar 2006, 08:36

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

Re: Kopie eines Arrays

Beitragvon BlackJack » Dienstag 14. Februar 2006, 10:11

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

methods mit und ohne Klammern

Beitragvon Poseidonius » Dienstag 14. Februar 2006, 12:19

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]