我正在Python 3中的嵌套列表上执行shuffle操作。我希望无限期地重新洗牌先前洗牌的列表,直到嵌套列表的顺序符合特定条件。 random.shuffle在原地操作并且在先前洗牌的列表上调用random.shuffle()不会重新洗牌。在符合条件之前无限期重新调整列表的最佳方法是什么。例如,我正在尝试这样的事情,但是制作一个新列表然后改组它似乎不起作用:
from random import shuffle
L1 = [[1,2], [3,4], [5,6], [7,8], [9,10]]
shuffle(L1)
match = L1[0]
# reshuffle until [9,10] is the first item in the list
if match != [9,10]:
L1 = list(L1)
shuffle(L1)
print(L1)
答案 0 :(得分:2)
在某个元素位于前面之前保持随机播放似乎效率低下。为什么不把那个元素取出来,把剩下的元素洗牌,然后将那个元素放在前面?
答案 1 :(得分:1)
本声明:
在先前洗牌的列表上调用random.shuffle()不会重新洗牌
这是不正确的。观察:
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> L1 = [[1,2], [3,4], [5,6], [7,8], [9,10]]
>>> from random import shuffle
>>> shuffle(L1)
>>> print L1
[[3, 4], [9, 10], [5, 6], [7, 8], [1, 2]]
>>> shuffle(L1)
>>> print L1
[[9, 10], [3, 4], [5, 6], [1, 2], [7, 8]]
>>>
以下代码应该可以执行您想要的操作,尽管它具有非确定性运行时。
from random import shuffle
L1 = [[1,2], [3,4], [5,6], [7,8], [9,10]]
match = [9,10]
while L1[0]!=match:
shuffle(L1)
print(L1)