Question de noob sur les listes

Question de noob sur les listes - Python - Programmation

Marsh Posté le 01-07-2023 à 17:19:58    

Je définis une matrice 2 * 2. Puis je change l'un des éléments. Et enfin je demande le contenu de la matrice.  
 

Code :
  1. a = [[1,2],[3,4]]
  2. a[1][1] = 5
  3. print(a)


 
Le résultat est celui que j'attends :  
 
[[1, 2], [3, 5]]
 
Maintenant je pars d'une matrice avec des valeurs nulles que je définis un peu différemment, je change également un élément et je demande le contenu de la matrice :  
 

Code :
  1. b = 2 * [2*[0]]
  2. print(b)


 
A ce niveau :  
[[0,0][0,0]]
 
Tout va bien
 
Je change la case (1,1) :

Code :
  1. b[1][1] = 1
  2. print(b)


 
Et la c'est la catastrophe, j'obtiens :
[[0, 1], [0, 1]]
 
Il me change toute la colonne et pas juste la case.
 
Quelle est la différence entre les deux situations et que faut il que je fasse pour que dans le deuxième cas il me change juste la case que je lui ai demandé ?


Message édité par epsiloneridani le 01-07-2023 à 17:20:11
Reply

Marsh Posté le 01-07-2023 à 17:19:58   

Reply

Marsh Posté le 03-07-2023 à 12:15:39    

Le problème est le suivant:
 
- 2*[0] ca te génère 2 cases, avec 2 valeurs et 2 références
 
[0 (référence 1)] [0 (référence 2)]
 
- 2 * [2*[0] ca te génère 1 ligne supplémentaires, avec 2 valeurs et 2 références qui sont les mêmes que la première ligne.
 
[0 (référence 1)] [0 (référence 2)]
[0 (référence 1)] [0 (référence 2)]
 
Donc si tu changes la valeur de la première case de la 2ème ligne, tu changes aussi la valeur de la première case de la 1ère ligne (car les cases ont la même référence)
 
Solution:
 
b = [[0 for col in range(2)] for row in range(2)]
 
Pour plus d'infos: https://www.oreilly.com/library/vie [...] 01s18.html
 
 

Reply

Marsh Posté le 03-07-2023 à 15:15:19    

Merci pour l'explication  :jap:

Reply

Marsh Posté le 12-07-2023 à 15:58:48    

Dans la première situation, lorsque vous définissez la matrice a comme a = [[1, 2], [3, 4]], vous définissez explicitement les valeurs de chaque élément de la matrice. Lorsque vous changez l'élément a[1][1] en 5, cela ne modifie que cet élément spécifique, ce qui donne la sortie attendue [[1, 2], [3, 5]].
 
Mais, dans la seconde situation, lorsque vous définissez la matrice b comme b = 2 * [2 * [0]], il semble que vous ayez l'intention de créer une matrice 2x2 avec des valeurs initiales de 0. Cependant, la façon dont vous avez défini b en fait crée une liste avec deux références à la même liste interne [0, 0]. Ainsi, lorsque vous modifiez un élément, il se reflète aux deux endroits.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed