# création de matrice avec les listes en python

**URL:** <https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624 "2016-02-21T21:34:30Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![alpha](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/6a8cbe/32.png) [@alpha](https://www.debian-fr.org/u/alpha)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/1 "2016-02-21T21:34:30Z")

</div>

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

```auto
>>> 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 ?

---

<div class="post-metadata">

**Author:** ![Papy\_Octet](https://www.debian-fr.org/user_avatar/www.debian-fr.org/papy_octet/32/8503_2.png) [@Papy\_Octet](https://www.debian-fr.org/u/Papy_Octet)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/2 "2016-02-21T21:34:31Z")

</div>

Bonjour alpha,

Je ne suis qu’un gros débutant mais j’ai repéré quelques infos concernant les matrices sous Python :  
[celui-ci](http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/),  
cet autre, [un pdf](http://www-irma.u-strasbg.fr/~navaro/imfs/numpy.pdf),  
un autre [pdf](http://math.mad.free.fr/wordpress/wp-content/uploads/ibiomtpy1.pdf),  
un autre [site](http://www.courspython.com/tableaux.html).

Si ça peut t’aider.

---

<div class="post-metadata">

**Author:** ![alpha](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/6a8cbe/32.png) [@alpha](https://www.debian-fr.org/u/alpha)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/3 "2016-02-21T21:34:31Z")

</div>

[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

---

<div class="post-metadata">

**Author:** ![lroy](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@lroy](https://www.debian-fr.org/u/lroy)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/4 "2016-02-21T21:34:31Z")

</div>

la réponse est là : [docs.python.org/3/reference/exp … operations](https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations)

> [@](#):
>
> alors que «&nbsp;[0]\*5&nbsp;» a donné 5 objets différents dans la même ligne

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

---

<div class="post-metadata">

**Author:** ![alpha](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/6a8cbe/32.png) [@alpha](https://www.debian-fr.org/u/alpha)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/5 "2016-02-21T21:34:32Z")

</div>

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]] ?

---

<div class="post-metadata">

**Author:** ![lroy](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@lroy](https://www.debian-fr.org/u/lroy)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/6 "2016-02-21T21:34:32Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![limax](https://www.debian-fr.org/user_avatar/www.debian-fr.org/limax/32/3886_2.png) [@limax](https://www.debian-fr.org/u/limax)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/7 "2016-02-21T21:34:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/8 "2016-02-21T21:34:35Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![alpha](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/6a8cbe/32.png) [@alpha](https://www.debian-fr.org/u/alpha)\
**Post date:** [Février 21, 2016, 9:34 UTC](https://www.debian-fr.org/t/creation-de-matrice-avec-les-listes-en-python/65624/9 "2016-02-21T21:34:54Z")

</div>

> [@seb-ksl](#):
>
> 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 🙂
