2016-11-22 6 views
0

Ich muss die gleiche Liste an eine andere mehr als einmal anhängen, und dann nur eine von ihnen ändern. Ich versuchteAnhängen der gleichen Liste an eine andere

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b) 

aber das Problem ist, dass wenn ich

list_a[0][0] = 1 

versuchen es list_a[1][0] und list_a[2][0] modifiziert auch. Wie kann ich das vermeiden?

+2

'list_a.append erfolgen' - anhängen Kopien von ' list_b' anstelle des Originals – khelwood

+0

Wirklich danke! @Khelwood –

+0

"Ich muss die gleiche Liste an eine andere mehr als einmal anhängen" - und jetzt haben Sie die * gleiche Liste * an die andere mehrere Male angehängt, was das Problem ist. Sie müssen mehrere Listen erstellen, anstatt dieselbe zu verwenden. – user2357112

Antwort

0

Verwenden Sie die folgenden Schritte aus:

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b[:]) 
1

bessere Möglichkeit, eine Liste wie diese zu erstellen, wenn alles, was Sie wollen, ist leere Liste mit allen 0 s zu erstellen ist:

my_list = [[0]*3 for _ in range(3)] 

Lassen Sie uns das Ergebnis überprüfen, ob Es hat das gleiche Problem oder nicht:

>>> my_list 
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
>>> my_list[0][0] = 1 
>>> my_list 
[[1, 0, 0], [0, 0, 0], [0, 0, 0]] 
#^  ^  ^
# Yipee! value changed only once 

Für den Grund zu wissen, warum Ihr Code nicht wo ist rking, check: Python list of lists, changes reflected across sublists unexpectedly

0

Sie hängen list_b drei Mal an, also was Sie ändern, ist das eigentliche Objekt list_b. ([:] List_b) Was Sie tun möchten, ist eine flache Kopie zu machen, das ist wie dieser

list_a.append(list(list_b)) 

oder ähnliche

list_a.append(list_b[:]) 
Verwandte Themen