Bonjour,
existe-t-il un moyen élégant de mélanger les entrées d'un tableau ?
Par exemple, j'entre ['un', 'deux', 'trois', 'quatre'] et j'obtiens quelque chose comme ['trois', 'deux', 'un', 'quatre'].
Bonjour,
existe-t-il un moyen élégant de mélanger les entrées d'un tableau ?
Par exemple, j'entre ['un', 'deux', 'trois', 'quatre'] et j'obtiens quelque chose comme ['trois', 'deux', 'un', 'quatre'].
Il s'agit sans doute de listes. Il existe bien un objet array en Python, mais il ne peut stocker de chaînes de caratères.
Pour le mélange de la liste en place, c'est pratiquement dans la FAQ:Si vous ne voulez pas détruire la liste originale, vous pouvez y acceder une table d'entiers "shufflés":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import random random.seed() liste = ['un', 'deux', 'trois', 'quatre'] print liste random.shuffle(liste) print liste
Il y a peut-être plus élégant, regardez le module random dans le manuel, je n'en connais pas toutes les subtilités...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import random random.seed() liste = ['un', 'deux', 'trois', 'quatre'] table = range(len(liste)) print liste random.shuffle(table) print [liste[table[_]] for _ in range(len(liste))]
Bonjour,
Il y a dans le module random une fonction shuffle() qui fait ça:
Tyrtamos
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 import random L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] random.shuffle(L) print L [4, 9, 3, 5, 0, 1, 7, 2, 6, 8]
[grillé par Pierre Maurette]
Edit: complément: si on veut pas toucher à la liste, on peut utiliser une autre liste comme index, dont les valeurs d'index sont mélangées. Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IND = random.sample(xrange(0,10),10) [4, 6, 2, 8, 3, 0, 7, 5, 1, 9]
Salut,
En utilisant un générateur de nombres aléatoires dans les limites du nombre de variables contenues dans ton tableau.
dans une boucle :
- récupérer le nombre aléatoire généré en fonction de la taille de ta liste :
Par exemple, tu as 4 variables :
randint( a, b)
Retourne un entier aléatoire N de telle manière que a <= N <= b.
pour toi : randint (0,len(MaListe))
- Tu as crée une liste dans laquelle tu vas placer chaque nombre aléatoire généré SI, et seulement SI, ce nombre n'y est déjà pas.
- Si tu as pu introduire le nombre aléatoire dans la liste, c'est qu'il n'a pas encore été tiréet que tu n'as pas encore traité l'entrée correspondante de ta liste de valeurs
.
Tu vas donc pouvoir sélectionner l'entrée de ta liste de valeur à l'indice donné par le nombre aléatoire tiré et placer cette valeur dans la nouvelle liste triée.
- Tu continues tant que tu n'as pas utilisé toutes les valeurs contenues dans la liste des valeurs - 1 puisque la dernière valeur n'a pas besoin d'être choisie aléatoirement puisqu'il ne reste qu'elle. (ça raccourcis la durée du programme !).
- Par précaution, met une limite maxi au bouclage car si, en cas de malheur, tu ne parvenais pas à pouvoir sélectionner toutes les valeurs de ta liste de valeurs, il serait malvenu que ton programme monopolise ta machine indéfiniment. (Tu mets le nombre de boucles à len(MaListe)*10000 par exemple.
Mais si tu as terminé le traitement de ta liste avant cette limite, tu dois forcer ton programme à sortir de la boucle
.
Voilà une marche à suivre.
Pour le code, c'est à toi de l'écrire. C'est comme ça qu'on apprend.
Présente ton code en cas de problème.
A+
Merci à tous.
Les deux premiers messages proposent une méthode élégante comme je cherchais.
Sinon merci pour la 3ème méthode (même si je savais déjà faire ce genre de chose).
PS : promis Pierre Maurette, je m'attarderais un peu sur la FAQ à l'occasion.![]()
" je m'attarderais un peu sur la FAQ à l'occasion "
Ce conditionnel ne donne pas l'impression d'une grande motivation.............
Ne le dis surtout pas à mes parents...![]()
Bonjour!
Je cherche à mélanger au hasard une liste d'images, par exemple:
images = (PhotoImage(file='photo1.gif'), PhotoImage(file='photo2.gif'), PhotoImage(file='photo3.gif') )
j'ai essayé:
import random
images2 = random.shuffle(images)
mais ça ne fonctionne pas...
sinon, j'ai aussi tenté de créer la fonction de permutation de liste suivante et de rappeler ensuite la fonction pour l'appliquer à la liste images, mais ça n'a pas marché non plus...
def listperm(lst):
n = len(lst)
for p in range (n):
q = randrange(n)
lst[p], lst[q] = lst[q], lst[p]
return lst
Quelques petits conseils seraient les bien venus...
Merci d'avance!
Partager