Listen in Listen

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
zyone
User
Beiträge: 1
Registriert: Mittwoch 27. Oktober 2004, 15:03
Kontaktdaten:

Hallo,
ich hab da ein Problem beim erstellen von Listen in Listen; und zwar folgendes:

Ich kenne die Anzahl der Elemente in einer Liste (alles '_'),und ich weiss
genau wie oft ich diese Liste in der Gesamtliste brauche.Also:

[['_','_',.......],['_','_',.....]]

Erstellt mit:

Code: Alles auswählen

        self.ZeicZeil=Max_Zeic_Zei
        self.Zeilen=Max_Zei
        self.Display1=[" "]*self.ZeicZeil
        self.Display=[]
        for i in range(self.Zeilen):
            self.Display.append(self.Display1)    
       print self.Display

Jedesmal wenn ich mir das obige Konstrukt erstelle und eine der hier im Beispiel zwei "unterlisten" mit Werten füllen will wird automatisch auch die 2 "unterliste" mit den gleichen werten gefüllt.

Meine Frage: Wie kann ich soetwas erstellen ohne das mir gleich beide Listen gefüllt werden?

Sitz an dem Problem jetzt schon länger dran, wär echt froh wenn mir da jemand weiterhelfen könnte.

Zyone
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich fasse dein Problem mal auf ein paar Zeilen Code zusammen:

Code: Alles auswählen

a=[1,2]
b=[a,a]
c=[a[:],a[:]]
b[0][0]=5
c[0][0]=5
In Liste b steht 2 mal die Liste a. Listen sind veränderbare Objekte, also können sie verändert werden. Das machst du, indem du einen neuen Wert zuweist. Dummerweise stehen nicht zwei verschiedene Listen in b, sondern genau die gleichen (Identität). Also verändert sich a und in der Darstellung sieht es aus, als ob zweimal neu zugewiesen wurde. In c stehen 2 Kopien von a, die durch slicen der ganzen Listen entstanden sind. Hier gibt es keine solche Änderung, da die Kopien als voneinander verschieden betrachtet werden können (kann man mit is überprüfen). Das sollte auch deine Lösung sein :wink: .
Gast

Vielen Danke für den Tip,

nach ein paar mal ausprobieren hat das dann genauso geklappt wie
ich das wollte. Da wär ich sonst wohl ewig nicht draufgekommen :-)

cu zyone
Antworten