2013-06-20 10 views
7

Występuje problem w moim programie i nie jestem pewien, co robię źle. Aby rozpocząć, utworzyłem pustą listę list. Na przykład:python dodający wartość do podlisty

>>> Lists = [[]]*12 

co daje:

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

Jednak gdy próbuje dołączyć wartość indywidualnego podmenu dodaje wartość do wszystkich podlist. Na przykład:

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

Daje:

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

Czy istnieje sposób, aby dołączyć do tylko jednej podlistę tak, że wynik będzie wyglądać następująco:

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

Możesz zajrzeć do [tego] (http://www.laurentluce.com/posts/python-list-implementation/), aby zrozumieć, dlaczego to dołącza się do wszystkich podlist . Jeśli spojrzysz na drugą cyfrę, możesz pomyśleć o 12 elementach na liście jako wskazujących na ten sam obiekt '[]'. Teraz, gdy dodajesz '1' do' Lists [2] ', dołącza on do obiektu listy współdzielonej. W związku z tym wszystkie elementy w 'Lists' wydają się mieć dołączone' 1'. – Nik

Odpowiedz

18

obiekty liście są zmienne, więc tworzysz listę z 12 odniesieniami do jednej listy. Użyj listowych i zrobić 12 różnych list:

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

Niestety, nie mogę znaleźć oryginalnego duplikat dokładnym to pytanie

1

wpadłem na ten sam problem, starając się rozwiązać problem sortowania topologicznego.

spróbuj tego:

Lists[2] = Lists[2]+[1]