2013-06-20 10 views
7

Ich habe ein Problem in meinem Programm und ich bin mir nicht sicher, was ich falsch mache. Zu Beginn habe ich eine leere Liste von Listen erstellt. Zum Beispiel:Python einen Wert an eine Unterliste anhängen

>>> Lists = [[]]*12 

die gibt:

>>> Lists 
[[], [], [], [], [], [], [], [], [], [], [], []] 

Wenn jedoch Wert auf eine individuelle sublist anhängen versucht, fügt sie den Wert auf all die Unterlisten. Zum Beispiel:

>>> Lists[2].append(1) 

Gibt:

>>> Lists 
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]] 

Gibt es eine Möglichkeit nur einzelne Teilliste anzuhängen, so dass das Ergebnis aussehen würde:

>>> Lists 
    [[], [], [1], [], [], [], [], [], [], [], [], []] 
+0

Sie können wollen, betrachten [diese] (http://www.laurentluce.com/posts/python-list-implementation/) zu verstehen, warum es für alle Sublisten anfügt . Wenn Sie sich die zweite Figur ansehen, können Sie sich die 12 Elemente in Ihrer Liste so vorstellen, dass sie auf das gleiche Objekt '[]' zeigen. Jetzt, wenn Sie '1' an Ihre' Listen [2] 'anhängen, hängt es an das geteilte Listenobjekt an. Daher scheint bei allen Elementen in "Listen" die "1" angehängt zu sein. – Nik

Antwort

18

Liste Objekte sind wandelbar, also machst du tatsächlich eine Liste mit 12 Referenzen auf eine Liste. eine Liste Verständnis verwenden und 12 verschiedene Liste:

Lists = [[] for i in range(12)] 

Sorry, kann ich nicht das Original-Duplikat dieser genauen Frage finde

1

ich in das gleiche Problem lief bei dem Versuch, eine lösen topologisches Sortierproblem.

versuchen Sie dies:

Lists[2] = Lists[2]+[1] 
Verwandte Themen