Valeur dans une liste dans une liste

Résolu/Fermé
159357x - 25 nov. 2020 à 02:07
 159357x - 10 déc. 2020 à 23:37
Bonjour, je suis sous python 3.7.4
Je souhaiterai savoir s'il est possible de changer un valeur spécifique d'une liste, qui elle même est à l'intérieur d'une liste.
Je pensais que quelque chose comme ça fonctionnerai, mais non.

cola=["0 ","0 ","0 ","0 ","0 "]
cole=cola
coly=cola
colu=cola
colo=cola
liste=[cole,cola]
for i in range(len(liste)) :
  print(liste[i])
liste[2][2]=" x"
for i in range(len(liste)) :
  print(liste[i])


Le problème, c'est qu'avec ce code, au lieu de ne changer que la valeur du milieu de la liste du milieu, cela change chaque valeur de la liste du milieu.
Pouvez-vous m'aider ?

Merci de votre aide d'avance.

Configuration: Windows / Firefox 83.0

4 réponses

_HeavenKnight_ Messages postés 14 Date d'inscription mercredi 26 octobre 2016 Statut Membre Dernière intervention 4 décembre 2020 1
25 nov. 2020 à 09:15
Bonjour à toi !

En effet, Python ne recopies pas les listes mais ne fait que des références
Par conséquent, pour recopier une liste, tu as 2 solutions:
liste1 = ["0 ", "0 ", "0 ", "0 "]
liste2 = []
for i in range(0, len(liste1))
{
  liste2.append(liste1[i])
}


ou bien

liste2 = liste1[0:len(liste)]


Par ailleurs, je repère une erreur dans ton code parce que
liste[2][2]
est faux. N'oublies pas que les indices commencent à 0

En espérant que ça ait pu t'aider !
0
Merci, mais mon but n'est pas de recopier une liste.

Voyez cela comme un tableau avec des cases, chaque case est un 0.
Le but de mon script était donc de changer la case du milieu en un x.

Pourriez vous s'il vous plait m'expliquer comment faire cela exactement ?
0
_HeavenKnight_ Messages postés 14 Date d'inscription mercredi 26 octobre 2016 Statut Membre Dernière intervention 4 décembre 2020 1
4 déc. 2020 à 09:58
Bonjour

Je dis cela parce que si tu fais:
cole = cola;
coly = cola;
...


En fait toutes tes listes seront identiques au point de répercuter chaque modification sur les autres

Ta liste a une longueur de 2. Par conséquent
liste[1][2] = 'x'
me semble plus correct

Pour copier ta liste cola dans cole, coly, ... tu ne peux pas faire ma_liste = autre_liste à cause du problème ci-dessus, mais tu dois copier chaque élément un par un
0
Oh, je vois.
Je ne pensais pas que ce que je mettais après aurait une influence sur du code plus haut.

Un grand merci pour ton aide !
0