Wie Sie erfahren haben, war das Mischen der Daten an Ort und Stelle das Problem. Ich habe das Problem auch häufig, und ich scheine auch oft zu vergessen, wie man eine Liste kopiert. Verwendung von sample(a, len(a))
ist die Lösung, wenn man len(a)
als der Stichprobenumfang. Siehe https://docs.python.org/3.6/library/random.html#random.sample für die Python-Dokumentation.
Hier ist eine einfache Version mit random.sample()
die das gemischte Ergebnis als neue Liste zurückgibt.
import random
a = range(5)
b = random.sample(a, len(a))
print a, b, "two list same:", a == b
# print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False
# The function sample allows no duplicates.
# Result can be smaller but not larger than the input.
a = range(555)
b = random.sample(a, len(a))
print "no duplicates:", a == list(set(b))
try:
random.sample(a, len(a) + 1)
except ValueError as e:
print "Nope!", e
# print: no duplicates: True
# print: Nope! sample larger than population