Probleme mit Liste

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
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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().
Dies ist keine Signatur!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

ist bei mir so ziemlich genau der selbe code...

fällt noch jemandem was ein? :(
Dies ist keine Signatur!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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.
Dies ist keine Signatur!
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.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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!
Dies ist keine Signatur!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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)
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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!
Dies ist keine Signatur!
Antworten