【问题标题】:Python - generate same random numbersPython - 生成相同的随机数
【发布时间】:2017-07-30 01:57:23
【问题描述】:
def main():
    x = [randint(1,100) for i in range(1,100)]
    return x

这将返回 100 个随机数 btw 1 和 100。每次我调用该函数时,它都会返回不同的数字序列。我想要的是每次都获得相同的数字序列。也许将结果保存到某处?

【问题讨论】:

  • 你可以使用pickle 或者只生成一次然后在你的程序中硬编码。
  • 你必须更具体,有很多方法可以做到这一点。
  • 我不认为pickle 直接相关,并且生成一次不是所要求的。
  • FWIW,您通常每次运行程序时只调用一次main()。你想每次运行程序都得到相同的数字序列吗?
  • 您似乎正在使用随机模块。 The documentation 告诉你如何使用seed 函数对其进行初始化。

标签: python python-2.7 random


【解决方案1】:

你可以提供一些固定的种子。

import random

def main():
    random.seed(9001)
    x = [random.randint(1,100) for i in range(1,100)]
    return x

有关种子的更多信息:random.seed(): What does it do?

【讨论】:

  • 这是不正确的。它不提供相同的结果,因为它是此类随机数的列表。
  • @AshishNitinPatil 你能说得更具体点吗?
  • 你可以做的不止这些。在任何特定点,您都可以使用random.getstate() 检索 rng 状态,然后使用 random.setstate() 重置它
  • 您应该将random.seed(9001) 放在函数本身中。把它放在外面并不能解决 OP 的问题。
  • @AshishNitinPatil 公平点。 OTOH,main() 通常只在每次程序调用时被调用一次,作为程序的入口点。但当然,OP 可能不遵守该约定。
【解决方案2】:

这是一个以您的代码为原型的基本示例

import random
s = random.getstate()

print([random.randint(1,100) for i in range(10)])

random.setstate(s)
print([random.randint(1,100) for i in range(10)])

在两次调用中,您都会得到相同的输出。关键是,您可以随时检索并在以后重新分配 rng 的当前状态。

【讨论】:

  • 好的,但是..如何将 getstate() 和 setstate() 合并到程序中?请用简单的英文书写
  • 当然,您只需要更详细地解释一下“纳入程序”的含义以及您要寻找的行为是什么。
  • 更改状态后将状态设置为原始值是安全的。如果您在应用程序的其他地方使用randint,您可能会遇到麻烦。另一种方法是使用random.Random 类实例并在其上设置种子
【解决方案3】:
In [19]: for i in range(10):
    ...:     random.seed(10)
    ...:     print [random.randint(1, 100) for j in range(5)]
    ...:
    ...:
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]
[58, 43, 58, 21, 82]

random.seed 函数必须在新调用 random 之前调用。

In [20]: random.seed(10)

In [21]: for i in range(10):
    ...:     print [random.randint(1,10) for j in range(10)]
    ...:
[5, 6, 3, 9, 9, 7, 2, 6, 4, 3]
[10, 10, 1, 9, 7, 4, 3, 7, 5, 7]
[7, 2, 8, 10, 10, 7, 1, 1, 2, 10]
[4, 4, 9, 4, 6, 5, 1, 6, 9, 2]
[3, 5, 1, 5, 9, 7, 6, 9, 2, 6]
[4, 7, 2, 8, 1, 2, 9, 10, 5, 5]
[3, 3, 7, 2, 2, 5, 2, 7, 9, 8]
[5, 4, 5, 1, 8, 4, 4, 1, 5, 6]
[4, 9, 7, 3, 6, 10, 6, 7, 1, 5]
[5, 5, 5, 6, 6, 5, 2, 5, 10, 5]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多