Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2162 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Question de noob sur les listes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question de noob sur les listes

n°2450267
epsiloneri​dani
Posté le 01-07-2023 à 17:19:58  profilanswer
 

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
mood
Publicité
Posté le 01-07-2023 à 17:19:58  profilanswer
 

n°2450387
Moumoule
Posté le 03-07-2023 à 12:15:39  profilanswer
 

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
 
 

n°2450401
epsiloneri​dani
Posté le 03-07-2023 à 15:15:19  profilanswer
 

Merci pour l'explication  :jap:

n°2451114
joun17
be cool
Posté le 12-07-2023 à 15:58:48  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Question de noob sur les listes

 

Sujets relatifs
question à propos de la validation d'un formulaireProblèmes de conversion Java du binaire au décimal (tableaux)
Question analyse/visualisation de données, niveau noobGUI SQL pour noob
Question sur les conditions inverséesFonction qui compare deux tableaux et stocke le résultat dans un trois
Netbeans IDE question pour les utilisateurs[noob] Les évènement type onXXX n'est pas détecté sur Android ?
[PostgreSQL] Question cluster (HA, réplication de données) 
Plus de sujets relatifs à : Question de noob sur les listes


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)