Python:如何随机打乱一个列表,其中每个变量都会在一个新的地方结束

Python: How to random shuffle a list where each variable will end up in a new place

我想随机打乱一个列表,以便打乱后列表中的每个变量都放在列表中的新位置。

我目前在做什么:

list = ['a', 'b','c', 'd'];
random.shuffle(list)

list
['c','b','d','a']

用这种方法我打乱了列表,但在这种情况下仍然有可能在同一个地方结束变量 'b'。

我想要的输出

完全打乱名单

['c','a','d','b']

感谢您的帮助。我是 python 的新手,但如果需要任何进一步的信息,请告诉我。

像这样应该可以满足您的要求:

import random
import copy

def super_shuffle(lst):
    new_lst = copy.copy(lst)
    random.shuffle(new_lst)
    for old, new in zip(lst, new_lst):
        if old == new:
            return super_shuffle(lst)

    return new_lst

示例:

In [16]: super_shuffle(['a', 'b', 'c'])
Out[16]: ['b', 'c', 'a']