python - 如何洗牌列表中的项目,同时避免任何项目留在原来的位置?

标签 python random

我对 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

这段代码通过了测试(如果 shuffle 可以完成的话),但是有没有更简单快捷的方法呢?

最佳答案

actual implementation 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]

稍作修改,我们可以添加您的新要求:

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]

关于python - 如何洗牌列表中的项目,同时避免任何项目留在原来的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254081/

相关文章:

javascript - 基于 JavaScript 文件上的 random() 执行不同的函数

python - 在 matplotlib 中使用 log2 比例制作方轴图

python - 加速我的 Fermat 分解函数 (Python)

python - 在绘图条形图中更改颜色

Python:如何从字典键中随机选择一个值?

java - 如何重置 switch 语句中的值?

python - 当文件使用 Python 具有不同的键时将 JSON 转换为 CSV?

python - 如何转发/填充 Pandas DataFrame 列/系列中的特定值?

random - 从表中设置表随机值

php - 大随机数生成