Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/09/2019, à 14:40

ar barzh paour

[Résolu] compréhension des listes en python

bonjour à tous voilà un petir script qui m'a donné du soucis dans une autre application
je précise que j'ai trouvé une solution mais j'aimerais comprendre pourquoi celui-ci ne fonctionne pas

pions_ligne=[0]*5
print(pions_ligne)
# [0, 0, 0, 0, 0]
pions_damier=[pions_ligne]*3
print(pions_damier)
#le résultat : [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
x=0
y=2
pions_damier[x][y]=1
print(pions_damier)
# pourquoi tous les indices 2 sont-ils à 1 ?
#le résultat : [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]]

donc la question est
pourquoi tous les indices 2 sont-ils à 1 ?
je m'attendais au résultat suivant :
[[0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Dernière modification par ar barzh paour (Le 03/09/2019, à 13:54)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 02/09/2019, à 15:44

Compte supprimé

Re : [Résolu] compréhension des listes en python

Bonjour,
C'est du à ce qu'on appelle un effet de bords* de tes références partagées.
D'abord tu crée une liste référencée par la variable pions_ligne, puis ta commande pions_damier[x][y]=1 modifie le contenu de la liste référencée par pions_ligne , ce qui par effet de bords modifie pions_damier ( pions_damier=[pions_ligne]*3)

*Pour plus d'info, je t'invite à faire une recherche sur le sujet.
Regarde aussi à quoi correspond une compréhension de liste...

Dernière modification par Compte supprimé (Le 02/09/2019, à 16:14)

#3 Le 02/09/2019, à 16:58

pingouinux

Re : [Résolu] compréhension des listes en python

Bonjour,
Tu peux remplacer

pions_damier=[pions_ligne]*3

par

pions_damier=[]
for k in range(3): pions_damier.append(list(pions_ligne))

Hors ligne

#4 Le 03/09/2019, à 13:45

ar barzh paour

Re : [Résolu] compréhension des listes en python

merci pseudofab pour ton explication ... je découvre un peu python et j'essaie de l'utiliser
je n'avais pas pensé à regarder pions_ligne
effectivement

print(pion_lignes] donne [0, 0, 1, 0, 0]

@pingouinux, la solution que j'avais utilisé

pions_damier=[]
for i in range(10):
    pions_damier.append([])
    for j in range(10):
        pions_damier[i].append(0)

remarque :je mets range(10) parce que c'est ce que j'ai dans ma petite application réelle (damier de 10X10)

Dernière modification par ar barzh paour (Le 03/09/2019, à 13:53)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#5 Le 03/09/2019, à 13:58

pingouinux

Re : [Résolu] compréhension des listes en python

Tu peux simplifier un peu :

pions_damier=[]
for i in range(10): pions_damier.append([0]*10)

Hors ligne