web-dev-qa-db-fra.com

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 existe probablement une solution unique, le travail est fait, non?

69
Roee Adler
>>> 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]
182
John Kugelman

On dirait que c'est le moyen le plus simple, sinon le plus véritablement aléatoire ( cette question explique plus en détail les limitations): http://docs.python.org/library/random.html#random.shuffle

13
MatrixFrog

Étant donné une chaîne item , voici un one-liner: 

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

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

3
Charles Ma
import random

b = []
a = int(input(print("How many items you want to shuffle? ")))
for i in range(0, a):
    n = input('Please enter a item: ')
    b.append(n)

random.shuffle(b)

print(b)
0
inti pires