带种子的 Python 随机序列

标签 python random

我正在为一个学校项目做这件事(所以我不能使用任何高级功能)并且我使用的是 Python 2.6.6。

我有一个从 1 到 1000 的数字列表,我的种子将是,比方说,448。

我如何使用该种子生成随机序列,以便我列表中的数字位于不同的索引中?

是否有可能在知道种子的情况下将列表中的元素返回到初始位置?

抱歉,如果我的问题令人困惑,但英语不是我的母语。

谢谢。

最佳答案

import random
SEED = 448

myList = [ 'list', 'elements', 'go', 'here' ]
random.seed(SEED)
random.shuffle(myList)

print myList

结果

['here', 'go', 'list', 'elements']

您的列表现在是伪随机的。

“伪”很重要,因为所有具有相同种子和项目数的列表将以相同的“随机”顺序返回。我们可以用它来取消洗牌;如果它真的是随机的,这将是不可能的。

Order = list(range(len(myList)))
# Order is a list having the same number of items as myList,
# where each position's value equals its index

random.seed(SEED)
random.shuffle(Order)
# Order is now shuffled in the same order as myList;
# so each position's value equals its original index

originalList = [0]*len(myList)   # empty list, but the right length
for index,originalIndex in enumerate(Order):
    originalList[originalIndex] = myList[index]
    # copy each item back to its original index

print originalList

结果

['list', 'elements', 'go', 'here']

多田! originalList 现在是 myList 的原始顺序。

关于带种子的 Python 随机序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557444/

相关文章:

python - pandas 中按组划分的独特值的一年滚动计数

python - PyCharm 未检测到 anaconda3 环境

python - 即使找到文件,也出现文件未找到错误

python - 使用列中的先前值和 pandas 中的一些计算来填充列

c++ - 为什么数字不会保持随机?

Python:随机种子问题

python - 减去数据框中各组之间的值

c# - 高效的位重映射算法

c++ - 如何找到 C 库中使用的确切 rand()?

c - 很好的介绍(伪)随机数生成