liste 2D a un comportement bizarre lorsque vous essayez de modifier une seule valeur [double]
-
02-10-2019 - |
Question
Possible en double: fonction inattendue dans une liste Python de listes
Je suis relativement nouveau pour Python et j'ai du mal à travailler avec des listes 2D.
Voici mon code:
data = [[None]*5]*5
data[0][0] = 'Cell A1'
print data
et est ici la sortie (formaté pour la lisibilité):
[['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None]]
Pourquoi chaque ligne se voit attribuer la valeur?
La solution
Cela fait une liste avec cinq références à même Liste:
data = [[None]*5]*5
Utilisez quelque chose comme ce lieu qui crée cinq listes distinctes:
>>> data = [[None]*5 for _ in range(5)]
Maintenant, il fait ce que vous attendez:
>>> data[0][0] = 'Cell A1'
>>> print data
[['Cell A1', None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None]]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow