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 18/11/2015, à 00:43

netsabes

test d'appartenance d'un shuffle de liste à une liste de listes

Bonjour,

mon titre est un peu confus, mais je vais essayer de clarifier :
J'ai écris le code ci-dessous.
Le problème est que la liste

sol

reste désespérément à 1 élément (la dernière valeur de l connue).
En fait, le test "in" renvoie toujours vrai, alors que j'ai fait un shuffle, et, de plus, le append n'ajoute pas mais remplace la liste.
Pourtant les liste [1,2] et [2,1] sont différentes par exemple.

J'ai fait le test :

L=[[1,2]]
[2,1] in L

renvoie false

Je ne vois pas mon erreur...

import random
l=[1,2,3,4,5,6,7,8,9]
sol=[]
ok=0
while ok<100:
    random.shuffle(l)
    if 100*l[0]+10*l[1]+l[2]+100*l[3]+10*l[4]+l[5]==100*l[6]+10*l[7]+l[8]:
        if l[2]+l[5]<10 and l[1]+l[4]<10:
            print "Sans retenue : ",
        else:
            print "Avec retenue : ",
        print 100*l[0]+10*l[1]+l[2],'+',100*l[3]+10*l[4]+l[5],'=',100*l[6]+10*l[7]+l[8]
        if not(l in sol):
            sol.append(l)
            ok=ok+1

Dernière modification par netsabes (Le 18/11/2015, à 00:45)


Cet Univers ne serait pas grand-chose s’il n’abritait pas les gens qu’on aime. (Stephen Hawking)
Linux Ubuntu 22.04 Gnome (64 bits)

Hors ligne

#2 Le 18/11/2015, à 01:01

netsabes

Re : test d'appartenance d'un shuffle de liste à une liste de listes

Problème contourné avec :

import random
l=[1,2,3,4,5,6,7,8,9]
sol=[]
ok=0
while ok<100:
    random.shuffle(l)
    if 100*l[0]+10*l[1]+l[2]+100*l[3]+10*l[4]+l[5]==100*l[6]+10*l[7]+l[8]:
        if l[2]+l[5]<10 and l[1]+l[4]<10:
            print "Sans retenue : ",
        else:
            print "Avec retenue : ",
        print 100*l[0]+10*l[1]+l[2],'+',100*l[3]+10*l[4]+l[5],'=',100*l[6]+10*l[7]+l[8]
        
        if not([l[0],l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8]] in sol):
            sol.append([l[0],l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8]])
            ok=ok+1
            raw_input() 

En fait j'ai observé le comportement suivant (que je trouve très étrange) :

L=[1,2,3,4,5]
sol=[]
sol.append(L)

on obtient

sol
[[1,2,3,4,5]]

puis on fait :

random.shuffle(L)

qui donne :

L
[5,3,2,4,1]

et enfin :

sol.append(L)

on obtient

sol
[[5,3,2,4,1],[5,3,2,4,1]]

On a totalement perdu la trace de l'ordre des éléments de L lors de son premier ajout.

Est-ce normal ?


Cet Univers ne serait pas grand-chose s’il n’abritait pas les gens qu’on aime. (Stephen Hawking)
Linux Ubuntu 22.04 Gnome (64 bits)

Hors ligne

#3 Le 18/11/2015, à 08:03

pingouinux

Re : test d'appartenance d'un shuffle de liste à une liste de listes

Bonjour,
Oui, c'est normal, il faut faire une copie de la liste.
Dans l'exemple en #1, remplacer

            sol.append(l)

par

            sol.append(list(l))

Hors ligne