salut
j’ai essayé de créer un matrice, sous python, avec le code suivant :
>>> a=[[0]*5]*3
j’avais comme objectif de créer un fonction de produit matriciel. A mon grande surprise, la fonction ne marche pas. Après une heure je découvre la chose suivante :
[code]>>> a=[[0]*5]*3
a[0][0]=1
a
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
a=[[0]*5]*3
a
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
a[0][0]=1
a
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
[/code]
le même objet, qui représente une ligne de la matrice, a été utilisé pour représenter les autres lignes.
conclusion : malgré la syntaxe très simple de python, il faut toujours rester prudent !
maintenant je ne comprends pas pour quoi ça ne donne pas
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
il devait utiliser le même [0] dans les lignes quand j’ai fait [0]*5
que pensez-vous ?
Je ne suis qu’un gros débutant mais j’ai repéré quelques infos concernant les matrices sous Python : celui-ci,
cet autre, un pdf,
un autre pdf,
un autre site.
[quote=“Papy Octet”][/quote]
merci pour ta réponse
Le seul problème que j’ai est lié à la syntaxe
je ne comprends pas pour quoi “[[0]*5]*3” a donné un seul objet “[[0]*5]” dans tous les cas de la matrice, alors que “[0]*5” a donné 5 objets différents dans la même ligne
tu mélanges contenu et contenant.
ta liste possède 5 emplacements qui sont initialement remplis avec 5 références identiques vers le même objet.
quand tu modifies un emplacement en lui affectant une nouvelle référence, il n’y a aucune raison pour que les autres emplacements soient modifiés.
Une façon élégante de faire des matrices sous Python est d’utiliser des lists comprehension : [mono][[ 0 for i in range(4)] for j in range(4)][/mono] par exemple pour une 4x4.