2010-10-04 22 views
9

Une question précédente avec le même titre que le mien has been posted, avec (je pense) la même question, mais avait d'autres problèmes dans le code. Je n'ai pas pu déterminer si cette affaire était identique à la mienne ou non.Python: Remplacer un élément dans une liste de listes (# 2)

De toute façon, je veux remplacer un élément dans une liste dans une liste. code:

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

Je me attends maintenant:

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

Mais je reçois:

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

Pourquoi?

Ceci est répliqué dans la ligne de commande. Python 3.1.2 ( R312: 79147, 15 avr 2010, 15:35:48) [GCC 4.4.3] sur linux2

+0

double possible de [créer N * problème N * liste N en Python] (http://stackoverflow.com/questions/1889080/problem-creating-nnn-list-in-python) – SilentGhost

Répondre

17

Vous avez des quatre références à un même objet par * 4, utilisez plutôt la compréhension de la liste avec plage de comptage:

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

pour expliquer un peu plus concrètement le problème:

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. Cela peut être déconcertant au début. L'explication et la solution sont toutes deux bonnes. –

+0

J'ai été frappé par ce problème moi-même, bien sûr;) –

+0

Ahh, difficile pour un débutant. Merci beaucoup pour l'aide! – reek