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 1883 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1883 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...
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...
3 réponses
-
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)
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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.
ajouteprint(liste_z)
dans ta boucle, cela t'aidera à comprendre.-
ceci t'aidera sans doute: https://www.fil.univ-lille1.fr/~L1S1Info/last/cours/102-list.pdf
-
-
-
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)