2017-03-09 111 views
-2
def main(): 
    x = [randint(1,100) for i in range(1,100)] 
    return x 

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

+0

你可以使用'pickle'或者只生成一次并在程序中对其进行硬编码。 –

+0

你必须更具体一些,有很多方法可以做到这一点。 –

+1

我不认为'咸菜'是直接相关的,并且一次生成不是所要求的。 – pvg

回答

6

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

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?

+0

这是不正确的。它不提供相同的结果,因为它是一个这样的随机数列表。 –

+0

@AshishNitinPatil你能更具体吗? –

+0

你可以做的不止于此。在任何特定的点你可以用'random.getstate()'检索rng状态,然后用'random.setstate()'重置它。 – pvg

3

这里是你的代码

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的当前状态。

+0

好的,但是..如何将getstate()和setstate()合并到程序中?请用简单的英语写作 –

+0

当然,你只需要更详细地解释一下你的意思是“包含在程序中”以及你所寻找的行为是什么。 – pvg

0
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函数必须在新调用随机前调用。

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]