Python shuffle such that position will never repeat
python, random, shuffle
Solution
Randomize in a loop and keep rejecting the results until your condition is satisfied:
import random
def shuffle_list(some_list):
randomized_list = some_list[:]
while True:
random.shuffle(randomized_list)
for a, b in zip(some_list, randomized_list):
if a == b:
break
else:
return randomized_list
Problem
I'd like to do a random shuffle of a list but with one condition: an element can never be in the same original position after the shuffle. Is there a one line way to do such in python for a list? Example: ``` list_ex = [1,2,3] ``` each of the following shuffled lists should have the same probability of being sampled after the shuffle: ``` list_ex_shuffled = [2,3,1] list_ex_shuffled = [3,1,2] ``` but the permutations [1,2,3], [1,3,2], [2,1,3] and [3,2,1] are not allowed since all of them repeat one of the elements positions. NOTE: Each element in the list_ex is a unique id. No repetition of the same element is allowed.