web-dev-qa-db-de.com

Die beste Möglichkeit, eine Liste von Strings in Python zu randomisieren

Ich erhalte als Eingabe eine Liste von Zeichenfolgen und muss eine Liste mit diesen Zeichenfolgen zurückgeben, jedoch in zufälliger Reihenfolge. Ich muss Duplikate zulassen - dieselbe Zeichenfolge kann in der Eingabe einmal oder mehrmals vorkommen und muss in der Ausgabe dieselbe Anzahl von Malen enthalten.

Ich sehe mehrere "rohe Gewalt" Wege, dies zu tun (unter Verwendung von Schleifen, Gott verbietet), eine davon verwende ich gerade. Aber wenn man Python kennt, gibt es wahrscheinlich einen coolen One-Liner, der die Arbeit erledigt, richtig?

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

Sieht so aus, als wäre dies der einfachste Weg, wenn nicht der wirklich zufälligste ( diese Frage erklärt die Einschränkungen ausführlicher): http://docs.python.org/library/random.html # random.shuffle

13
MatrixFrog

Bei einem String item ist hier ein Einzeiler: 

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

Sie müssen die Zeichenfolgen in ein Array einlesen und dann einen Mischalgorithmus verwenden. Ich empfehle Fisher-Yates Shuffle

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