我有一个问题random.shuffle.基本上,它可以正常工作以伪随机化列表中的项目,但在我的情况下,我还想防止项目保持在相同的位置.
我想出了这个代码,以确保每个项目都有一个新的位置.
match = True
while match is True:
for i in range(len(initial_list)):
if initial_list[i]==result_list[i]:
random.shuffle(result_list)
match = True
else:
match = False
Run Code Online (Sandbox Code Playgroud)
此代码通过测试(如果可以进行随机播放),但有更简单,更快速的方法吗?
在实际执行的random.shuffle是很简单的:
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = int(random() * (i+1))
x[i], x[j] = x[j], x[i]
Run Code Online (Sandbox Code Playgroud)
稍微修改相同的想法,我们可以添加您的新要求:
from random import random
def my_shuffle(x):
if len(x) == 1:
raise Exception
for i in reversed(range(1, len(x))):
# pick an element in x[:i] with which to exchange x[i]
j = int(random() * i)
x[i], x[j] = x[j], x[i]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |