Seite 1 von 1
Probleme mit Liste
Verfasst: Samstag 3. April 2010, 19:17
von Shaldy
Hi zusammen,
ich hab folgendes Problem:
Code: Alles auswählen
class Klasse(object):
def __init__(self, p1, ...):
...
self.liste = p1
def methode(self, ...):
neu = [ ]
#Neu wird hier mit Daten gefüttert
self.liste = neu
Ich will also in Klasse.methode() self.liste überschreiben. Das passiert aber nicht, es bleiben die gleichen Werte, wie vor Klasse.methode().
Verfasst: Samstag 3. April 2010, 19:37
von cofi
Kann ich nicht nachvollziehen. Folgendes funktioniert:
Code: Alles auswählen
class C(object):
def __init__(self, p):
self.p = p
def m(self):
neu = range(5)
self.p = neu
>>> c = C([1,2])
>>> c.p
[1, 2]
>>> c.m()
>>> c.p
[0, 1, 2, 3, 4]
Erzaehl doch mal was in den Passagen passiert, die du ausgelassen hast.
Verfasst: Samstag 3. April 2010, 20:35
von Shaldy
ist bei mir so ziemlich genau der selbe code...
fällt noch jemandem was ein?

Verfasst: Samstag 3. April 2010, 20:42
von cofi
Shaldy hat geschrieben:ist bei mir so ziemlich genau der selbe code...
Dann poste den doch bitte. Ohne laesst sich nicht mehr sagen, da das Verhalten ganz klar an deinem Code liegt.
Verfasst: Samstag 3. April 2010, 21:08
von Shaldy
Also der Code macht folgendes:
Gegeben ist self.nullstellen, das ist eine Liste die Nullstellenobjekte enthält.
Ein Nullstellenobjekt hat 3 Member:
wert
darstellung
vielfachheit
In self.nullstellen werden einige doppelte Nullstellen sein. Der Code soll erstmal alle Werte in Float konvertieren und dann vergleichen, sodass am Ende nur noch von jedem Nullstellenobjekt eins vorhanden ist. Falls die Nullstelle vorher doppelt vorhanden war, hat sie nun eine zweifache Vielfachheit, falls vorher 3 mal nun eine dreifache usw.
Code: Alles auswählen
#Doppelte Nullstellen entfernen und Vielfachheit ergänzen
liste = [ ]
for ns in self.nullstellen:
if type(ns.wert) != float:
ns.wert = float(ns.wert)
#Mit allen schon vorhandenen Nullstellen vergleichen
found = False
for ns2 in liste:
if ns.wert == ns2.wert:
found = True
ns2.vielfach += 1
break
if not found:
liste.append(ns)
self.nullstellen = liste
self.nullstellen wurde nicht verändert, obwohl eine Ausgabe von liste das richtige Ergebnis liefert. Er überschreibt einfach nicht.
Verfasst: Samstag 3. April 2010, 21:23
von BlackJack
@Shaldy: Deine Behauptung kann nicht stimmen, denn es wird ja am Ende `self.nulstellen` an die neue Liste gebunden. Könntest Du bitte soviel Quelltext zeigen, das wir das Problem auch *nachvollziehen* können? Wenn's geht soweit gekürzt, dass nur noch das nötigste da steht, aber trotzdem das Problem noch auftaucht.
Verfasst: Samstag 3. April 2010, 21:53
von Shaldy
Tut mir leid ich schaff es heute nicht mehr den Fehler zu isolieren.
Erstmal danke für die Hilfe.
Melde mich später oder morgen wieder.
Bis bald!
Verfasst: Samstag 3. April 2010, 22:43
von cofi
Unabhaengig davon noch eine Anmerkung zum Code:
Code: Alles auswählen
found = False
for ns2 in liste:
if ns.wert == ns2.wert:
found = True
ns2.vielfach += 1
break
if not found:
liste.append(ns)
laesst sich so schreiben:
Code: Alles auswählen
for ns2 in liste:
if ns.wert == ns2.wert:
ns2.vielfach += 1
break
else:
liste.append(ns)
Verfasst: Dienstag 6. April 2010, 18:58
von Shaldy
Problem gelöst!
Der Fehler lag darin, dass ich den ganzen Code zu weit eingerückt hatte.
Kann geschlossen werden!
Danke für die Hilfe!