81 votes

Meilleure façon de randomiser une liste de chaînes en Python

Je reçois en entrée une liste de chaînes et je dois renvoyer une liste avec ces mêmes chaînes mais dans un ordre aléatoire. Je dois autoriser les doublons - la même chaîne peut apparaître une ou plusieurs fois dans l'entrée et doit apparaître autant de fois dans la sortie.

Je vois plusieurs moyens "brutaux" de faire cela (en utilisant des boucles, Dieu nous en préserve), dont je suis en train d'utiliser. Cependant, sachant que Python est probablement un one-liner bien fait, le travail est fait, non?

213voto

John Kugelman Points 108754
>>> import random
>>> x = [1, 2, 3, 4, 3, 4]
>>> random.shuffle(x)
>>> x
[4, 4, 3, 1, 2, 3]
>>> random.shuffle(x)
>>> x
[3, 4, 2, 1, 3, 4]

13voto

MatrixFrog Points 11066

On dirait que c'est la manière la plus simple, sinon la plus aléatoire: http://docs.python.org/library/random.html#random.shuffle

7voto

Yann VR Points 97

Étant donné un élément de chaîne, voici un one-liner:

 ''.join([str(w) for w in random.sample(item, len(item))])
 

3voto

Charles Ma Points 12330

Vous devrez lire les chaînes dans un tableau, puis utiliser un algorithme de réorganisation. Je recommande le shuffle Fisher-Yates

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X