Python:如何随机随机播放列表,其中每个变量将在新的位置结束

Dre*_*Dre 6 python random shuffle

我想随机随机播放一个列表,以便在洗牌时列表中的每个变量都放在列表中的新位置.

我目前在做什么:

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

list
['c','b','d','a']
Run Code Online (Sandbox Code Playgroud)

通过这种方法,我可以对列表进行洗牌,但在这种情况下,"b"仍然可以将变量放在同一个位置.

我想要的输出

完全洗牌的清单

['c','a','d','b']
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ack 5

像这样的事情应该做你想做的:

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
Run Code Online (Sandbox Code Playgroud)

例子:

In [16]: super_shuffle(['a', 'b', 'c'])
Out[16]: ['b', 'c', 'a']
Run Code Online (Sandbox Code Playgroud)