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']
我想随机打乱一个列表,以便打乱后列表中的每个变量都放在列表中的新位置。
我目前在做什么:
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']