【问题标题】:Python random sequence with seed带有种子的 Python 随机序列
【发布时间】:2010-12-29 20:08:44
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

  • docs.python.org/release/2.6.6/library/random.html 会告诉你你需要知道的一切
  • @Rafe 我以前读过但不明白
  • 我真的希望 448 恰好是一个非常小的数字。对于您的输入,有阶乘 (1000) 排序选项,因此为了获得正确的伪随机数,您需要一个这种大小的种子。

标签: python random


【解决方案1】:
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 的原始排序。

【讨论】:

  • 迟到了,但这是一个很棒的答案。很酷的使用伪随机性!
  • 如果它创建一个本地 random.Random 实例来播种而不是使用默认实例会更棒。这个答案让我搜索如何以线程安全的方式进行。
【解决方案2】:

对 python 文档的简单检查 http://docs.python.org/library/random.html 告诉你

random.seed([x])

您可以使用它来初始化种子。

要再次按初始顺序获取项目,请再次设置种子并再次获取随机数。然后,您可以使用此索引来获取列表中的内容,或者只使用索引来做任何事情。

您只需对列表进行排序,它就会再次按排序顺序排列。

【讨论】:

  • 我以前读过但不明白。我已经完成了 random.seed(448) 并没有给我任何东西。我如何使用这个我的清单?
  • 您使用该种子功能设置种子。然后调用该模块中的另一个方法来获取下一个随机数。
猜你喜欢
  • 2013-05-23
  • 1970-01-01
  • 2017-01-25
  • 2011-04-04
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多