#1 Le 17/11/2015, à 23: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 17/11/2015, à 23: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, à 00: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, à 07: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