2010-10-04 17 views
9

Una domanda precedente con lo stesso titolo del mio has been posted, con (penso) la stessa domanda, ma aveva altri problemi nel codice. Non ero in grado di determinare se quel caso fosse identico al mio o meno.Python: sostituzione di un elemento in un elenco di elenchi (n. 2)

In ogni caso, voglio sostituire un elemento all'interno di un elenco in un elenco. Codice:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]] 
myNestedList[1][1] = 5 

ora mi aspetta:

[[0, 0], [0, 5], [0, 0], [0, 0]] 

ma ottengo:

[[0, 5], [0, 5], [0, 5], [0, 5]] 

Perché?

Questo è replicato nella riga di comando. Python 3.1.2 (R312: 79147, Apr 15 2010, 15:35:48) [GCC 4.4.3] su linux2

+0

possibile duplicato del [problema creazione di N * N * N lista in Python] (http://stackoverflow.com/questions/1889080/problem-creating-nnn-list-in-python) – SilentGhost

risposta

17

Si stanno avendo quattro riferimenti a stesso oggetto da * 4, utilizzare al posto di lista con gamma per il conteggio:

my_nested_list = [[0,0] for count in range(4)] 
my_nested_list[1][1] = 5 
print(my_nested_list) 

per spiegare po 'più concretamente il problema:

yourNestedList = [[0,0]]*4 
yourNestedList[1][1] = 5 
print('Original wrong: %s' % yourNestedList) 

my_nested_list = [[0,0] for count in range(4)] 
my_nested_list[1][1] = 5 
print('Corrected: %s' % my_nested_list) 

# your nested list is actually like this 
one_list = [0,0] 
your_nested_list = [ one_list for count in range(4) ] 
one_list[1] = 5 
print('Another way same: %s' % your_nested_list) 
+1

+1. All'inizio questo può essere sconcertante. La spiegazione e la soluzione sono entrambe buone. –

+0

Io stesso sono stato colpito da questo problema, naturalmente;) –

+0

Ah, difficile per un principiante. Grazie mille per l'aiuto! – reek

Problemi correlati