我想对列表进行随机洗牌,但有一个条件:洗牌后元素永远不会处于相同的原始位置。
是否有一种在 python 中为列表执行此操作的单行方法?
例子:
list_ex = [1,2,3]
以下每个经过打乱的列表在打乱后应该具有相同的被采样概率:
list_ex_shuffled = [2,3,1]
list_ex_shuffled = [3,1,2]
但排列 [1,2,3]、[1,3,2]、[2,1,3] 和 [3,2,1] 是不允许的,因为它们都重复元素位置之一.
注意:list_ex 中的每个元素都是唯一的 ID。不允许重复相同的元素。
最佳答案
在循环中随机化并不断拒绝结果,直到满足您的条件:
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
关于Python 洗牌使得位置永远不会重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512058/