J'ai un problème avec la création d'une liste de liste et la fonction shuffle

Résolu
DOUDOU#9 -  
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Comme expliqué dans le titre j'essai de faire une liste avec toutes les combinaisons possibles d'une liste de 19 chiffres numérotés de 1 à 19 avec la fonction shuffle du module random sauf que lorsque j'ajoute une sous-liste avec append toutes les sous-listes sont actualisées...
Voici le code en question et le résultat ci dessous:

import random as rd

liste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
liste_z = []


for i in range(10):
rd.shuffle(liste)
liste_z.append(liste)

print(liste_z)


[[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8],
[16, 11, 18, 15, 10, 19, 7, 14, 6, 5, 2, 3, 9, 13, 17, 1, 12, 4, 8]]

Merci beaucoup pour votre attention, j'espère que ce problème n'est pas juste un beug...
A voir également:

3 réponses

Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
Bonjour,

Tout se passe comme si la liste ajoutée à liste_z n'était pas une copie de liste, mais liste
elle-même

Donc, quand on refait rd.shuffle(liste), on modifie aussi dans liste_z

Moi je ferais une copie de liste avant de mélanger (shuffle):

liste_z=[]
li=liste.copy()
random.shuffle(li)
liste_z.append(li)
0
DOUDOU#9
 
parfait ça marche!
merci infiniment pour votre réponse.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583
 
il est possible aussi, dans l'instruction append, d'insérer une copie de la liste plutôt qu'une référence à la liste:
for i in range(10):
    rd.shuffle(liste)
    liste_z.append(liste[:])
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
bonjour,
c'est un bug dans ton programme, en effet.
tu crées une liste, liste_z, dans laquelle tu mets 10 références vers la même liste.
ajoute
print(liste_z)
dans ta boucle, cela t'aidera à comprendre.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583
 
0
DOUDOU#9
 
j'avais essayé et en effet je voyais que ça réactualisais toute la liste mais ça ne m'a pas aidé à résoudre le problème.
merci pour votre réponse en tout cas
0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
En tout cas, si tu fais comme je te l'indique dans mon message de 11h14,

ca résout le problème

(copie de la liste avant shuffle)
0