2016-08-11 4 views
0

Ich hatte ein Problem beim Versuch, ein bestimmtes Element in einer verschachtelten Liste zu ändern. Der Code, den ich geschrieben habe, ist in Python 2.7. Diese ist das, was ich geschrieben habe:Fehler beim Ändern der Liste in Python

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list_1) 
    infin = infin - 1 

Im Grunde ist es eine Liste macht, die wie folgt aussieht:

[[25 Tupeln], [25 Tupeln], [25 Tupeln], [25 Tupeln], [25 Tupeln]]

dann, wenn ich versuche, die Liste zu ändern, indem dies zu tun:

list_2[0][0] = (1,1,1) 

Jede einzelne Liste mit 25 Tupel darin hat (1,1,1) am Anfang, nicht nur die ersten. Warum?

Antwort

1

Sie hängen nicht tatsächlich verschiedene Instanzen von Listen an, stattdessen fügen Sie wiederholt einen Verweis auf die gleiche Liste hinzu. Verwenden Sie die Liste, um dies zu vermeiden.

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1 
2

Da Sie die gleiche Liste list_1 5 mal anhängen. Was Sie in list_1 ändern, wird 5 Mal gedruckt, weil die Liste 5 Mal hinzugefügt wurde. Wenn Sie neue Listen möchten, verwenden Sie:

list(list_1) 
1

list_1 ein Objekt ist. Dann fügen Sie das Objekt fünfmal zu einer anderen Liste hinzu und erstellen nicht 5 Kopien des Objekts, sondern 5 Referenzen auf das gleiche Objekt.

Sie müssen die Liste kopieren, wie Sie die zweite Liste zu erstellen:

infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1 
Verwandte Themen