Ich erhalte als Eingabe eine Liste von Zeichenfolgen und muss eine Liste mit denselben Zeichenfolgen zurückgeben, jedoch in zufälliger Reihenfolge. Ich muss Duplikate zulassen - dieselbe Zeichenfolge kann einmal oder mehrmals in der Eingabe erscheinen und muss in der Ausgabe genauso oft vorkommen.
Ich sehe verschiedene "Brute Force" -Methoden (mit Schleifen, Gott bewahre), von denen ich derzeit eine verwende. Wenn Sie jedoch wissen, dass Python einen coolen Einzeiler hat, erledigen Sie den Job, oder?
Antworten:
>>> 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]
quelle
random.shuffle
mischt Listen an Ort und Stelle. In Python 3range(5)
ist ein Generator, keine Liste. In Python 2range(5)
ist eine Liste vorhanden, aber das Mischen ist vorhanden, sodass eine temporäre Liste gemischt wird, die sofort weggeworfen wird. Sie können tunx = range(5); random.shuffle(x)
und dann verwendenx
.Sieht so aus, als wäre dies der einfachste, wenn nicht der zufälligste Weg ( diese Frage erklärt die Einschränkungen ausführlicher): http://docs.python.org/library/random.html#random.shuffle
quelle
Ein String gegeben Element , hier ist ein Einzeiler:
''.join([str(w) for w in random.sample(item, len(item))])
quelle
Sie müssen die Zeichenfolgen in ein Array einlesen und dann einen Mischalgorithmus verwenden. Ich empfehle Fisher-Yates Shuffle
quelle
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)
quelle
In Python 3.8 können Sie das Walross verwenden, um es in ein paar Zeilen zu packen. Zuerst müssen Sie eine Liste aus der Zeichenfolge erstellen und in einer Variablen speichern. Dann können Sie zufällig verwenden, um es zu mischen. Fügen Sie dann einfach die Liste wieder zu einer Zeichenfolge zusammen.
random.shuffle(x := list("abcdefghijklmnopqrstuvwxyz")) x = "".join(x)
quelle