Python 洗牌使得位置永远不会重复

标签 python random shuffle

我想对列表进行随机洗牌,但有一个条件:洗牌后元素永远不会处于相同的原始位置。

是否有一种在 python 中为列表执行此操作的单行方法?

例子:

list_ex = [1,2,3]

以下每个经过打乱的列表在打乱后应该具有相同的被采样概率:

list_ex_shuffled = [2,3,1]
list_ex_shuffled = [3,1,2]

但排列 [1,2,3]、[1,3,2]、[2,1,3] 和 [3,2,1] 是不允许的,因为它们都重复元素位置之一.

注意:list_ex 中的每个元素都是唯一的 ID。不允许重复相同的元素。

最佳答案

在循环中随机化并不断拒绝结果,直到满足您的条件:

import random

def shuffle_list(some_list):
    randomized_list = some_list[:]
    while True:
        random.shuffle(randomized_list)
        for a, b in zip(some_list, randomized_list):
            if a == b:
                break
        else:
            return randomized_list

关于Python 洗牌使得位置永远不会重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512058/

相关文章:

python - python文档中所有这些奇怪的括号是什么

php - 根据该行的 "weight"随机选择行

r - rnorm 函数使用的算法

c++ - CUDA 中的随机播放指令

python - python 的 random.shuffle 出现问题

Python Sphinx 在生成 pdf 时跳过第一部分

python - 如何使用 bsddb3 将(长)整数值写入 Berkeley DB?

python - OpenCV 和 Python : Connected components analysis

c++ - 在 C++ 中生成一个随机文件名

android - 如何从 ImageView (ANDROID) 获取文件名