2010-10-04 17 views
9

Una pregunta anterior con el mismo título que la mía has been posted, con (creo) la misma pregunta, pero tenía otros problemas en el código. No pude determinar si ese caso era idéntico al mío o no.Python: Reemplazar un elemento en una lista de listas (# 2)

De todos modos, quiero reemplazar un elemento dentro de una lista en una lista. Código:

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

ahora espera:

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

pero me sale:

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

¿Por qué?

Esto se replica en la línea de comandos. Python 3.1.2 (R312: 79147, abr 15 2010, 15:35:48) [GCC 4.4.3] en linux2

+0

posible duplicado de [problema creando N * N * N lista en Python] (http://stackoverflow.com/questions/1889080/problem-creating-nnn-list-in-python) – SilentGhost

Respuesta

17

Usted está teniendo cuatro referencias al mismo objeto por 4 *, En lugar de utilizar la lista con la comprensión rango para el conteo:

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

para explicar poco más concretamente el 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. Esto puede ser desconcertante al principio. La explicación y la solución son buenas. –

+0

Me he visto afectado por este problema, por supuesto;) –

+0

Ahh, complicado para un principiante. ¡Muchas gracias por la ayuda! – reek

Cuestiones relacionadas