Affichage éléments de sous-liste

Résolu/Fermé
BlackDarkrai Messages postés 1 Date d'inscription dimanche 27 novembre 2022 Statut Membre Dernière intervention 27 novembre 2022 - 27 nov. 2022 à 19:03
 PierrotLeFou - 28 nov. 2022 à 01:27

Salut !!!!

j'ai du mal à comprendre pourquoi ma ligne " myListe[0][0]=3" modifie plusieurs éléments à la fois . Quelqu'un serait-il en mesure de l'expliquer ?

2 réponses

yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445
Modifié le 27 nov. 2022 à 19:24

bonjour,

merci de partager du texte, et pas des images, et de tenir compte de ceci quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

cet exemple plus simple t'aidera peut-être à comprendre le comportement de ton code:

liste=[]
sousliste=[1]
liste.append(sousliste)
liste.append(sousliste)
print("avant:",liste)
liste[0][0]=2
print("ensuite:",liste)
0
yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445
Modifié le 27 nov. 2022 à 19:26

Ce que tu fais, c'est mettre deux références à sousliste dans liste.

Ce que tu souhaites faire, c'est sans doute copier le contenu de sousliste dans liste:

liste=[]
sousliste=[1]
liste.append(sousliste.copy())
liste.append(sousliste.copy())
print("avant:",liste)
liste[0][0]=2
print("ensuite:",liste)
0
yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445 > yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024
27 nov. 2022 à 19:29
liste=[]
sousliste=[1]
liste.append(sousliste)
print("sousliste avant:", sousliste)
liste[0][0]=2
print("sousliste ensuite:", sousliste)

En modifiant liste[0], c'est sousliste que tu modifies.

0
PierrotLeFou
28 nov. 2022 à 01:27

Ce problème revient fréquemment. Je vais tenter une explication. J'espère qu'elle sera claire. :)
Comme l'a souligné yg_be, si on insère le même élément dans une liste comme sous-liste, c'est comme si on insérait un "pointteur" vers cette sous-liste.
Donc, en modifiant un élément dans la sous-liste, la modification apparaît partout.
Pour éviter ça, on peut par exemple, faire un append d'une "copie" de la sous-liste:
liste.append(sousListe[:])

0