Chciałbym losowo przetasować listę, ale z jednym warunkiem: element nie może być nigdy w tej samej oryginalnej pozycji po shuffle.Python shuffle takie, że pozycja nigdy się nie powtórzy
Czy istnieje jednoliniowy sposób na takie w python dla listy?
przykład:
list_ex = [1,2,3]
każdego z następujących list tasuje powinien mieć takie samo prawdopodobieństwo zostania próbki po tłumie:
list_ex_shuffled = [2,3,1]
list_ex_shuffled = [3,1,2]
ale permutacji [1,2,3], [ 1,3,2], [2,1,3] i [3,2,1] są niedozwolone, ponieważ wszystkie z nich powtarzają jedną z pozycji elementów.
UWAGA: Każdy element w klasie list_ex jest unikalnym identyfikatorem. Nie można powtórzyć tego samego elementu.
Wszelkie pomysły? dzięki!
Czego można się spodziewać, gdy lista zawiera wiele pozycji, które są sobie równe. Na przykład, co chcesz zrobić, gdy lista to '[2, 2, 2]'? – crayzeewulf
Połączenie użycia [deque] (http://docs.python.org/2/library/collections.html#collections.deque) i jego metody "rotate" może dać oczekiwany rezultat. Ale w niektórych przypadkach, jak w powyższym komentarzu, nie ma jasno sprecyzowanego oczekiwanego rezultatu. – sean
@ crayzeewulf dobry punkt! struktura moich danych nigdy nie spotka się z takim przypadkiem, dzięki! – Dnaiel