Contenu | Rechercher | Menus

Annonce

La nouvelle clé USB Ubuntu-fr est en prévente
Rendez-vous sur la boutique En Vente Libre

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)


Ubuntu 18.04 (sept 2018) (était en essai depuis 12/2017)
Ubuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz Ubuntu 18.04

Hors ligne

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

pseudofab

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 pseudofab (Le 02/09/2019, à 16:14)


# Là pour le plaisir de découvrir .

# Débutant en tout ...  je me régale !

Hors ligne

#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)


Ubuntu 18.04 (sept 2018) (était en essai depuis 12/2017)
Ubuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz Ubuntu 18.04

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