2013-06-20 9 views
7

Ho riscontrato un problema nel mio programma e non sono sicuro di ciò che sto facendo male. Per iniziare ho creato una lista vuota di liste. Ad esempio:python accodamento di un valore a una sottolista

>>> Lists = [[]]*12 

che assicura:

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

Tuttavia, quando si cerca di aggiungere un valore a un individuo sottolista si aggiunge il valore di tutti i sottoelenchi. Per esempio:

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

Dà:

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

Esiste un modo per aggiungere ad un solo sottolista in modo che il risultato sarà simile:

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

Si consiglia di guardare [questo] (http://www.laurentluce.com/posts/python-list-implementation/) per capire il motivo per cui aggiunge a tutte le liste parziali . Se guardi la seconda figura, puoi pensare ai 12 elementi nella tua lista come ad indicare lo stesso oggetto '[]'. Ora quando aggiungi '1' al tuo' Elenchi [2] ', si aggiunge all'oggetto lista condivisa. Quindi, tutti gli elementi in 'Lists' sembrano avere il' 1' aggiunto. – Nik

risposta

18

oggetti List sono mutabili, quindi stai effettivamente facendo una lista con 12 riferimenti a una lista. Utilizzare un elenco di comprensione e fare 12 liste distinte:

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

Mi dispiace, ma non riesce a trovare il duplicato originale di questo domanda esatta

1

mi sono imbattuto in questo stesso problema durante il tentativo di risolvere un problema di ordinamento topologico.

provare questo:

Lists[2] = Lists[2]+[1] 
Problemi correlati