création de matrice avec les listes en python

salut
j’ai essayé de créer un matrice, sous python, avec le code suivant :

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 ?

Bonjour alpha,

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.

Si ça peut t’aider.

[quote=“Papy Octet”][/quote]
merci pour ta réponse :slightly_smiling:
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

la réponse est là : docs.python.org/3/reference/exp … operations

c’est surtout faux, tes 5 ‘0’ sont tous le même objet. tu peux le vérifier avec id(a[0][0]) et id(a[0][1]) par exemple.

oui, t’as raison.

[code]>>> a=[[0]*5]

id(a[0][0])
34644336

id(a[0][1])
34644336

a
[[0, 0, 0, 0, 0]]

a[0][1]=1
a
[[0, 1, 0, 0, 0]]
[/code]
Donc, pourquoi cette affectation donne [[0, 1, 0, 0, 0]] et non pas [[1, 1, 1, 1, 1]] ?

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.

Bonjour
regarde par exemple http://sametmax.com/valeurs-et-references-en-python/

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.

j’aime bien ce code :slightly_smiling: