Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中获取伪随机数生成器种子值_Python_Random - Fatal编程技术网

Python 从列表中获取伪随机数生成器种子值

Python 从列表中获取伪随机数生成器种子值,python,random,Python,Random,假设我想生成一个随机整数列表,所以我使用这个程序,并将种子设置为10: import random random.seed(10) randomlist = random.sample(range(0, 5), 5) print(randomlist) 输出将始终为[4,0,1,2,3], 因为我把种子设定为10。这就是为什么我一次又一次地得到同样的结果 但我的问题是:有可能从未知的随机值中得到种子数吗 例如,我有一个随机列表: mylist = [3, 2, 0, 1, 2] # 5 ite

假设我想生成一个随机整数列表,所以我使用这个程序,并将种子设置为10:

import random
random.seed(10)
randomlist = random.sample(range(0, 5), 5)
print(randomlist)
输出将始终为[4,0,1,2,3], 因为我把种子设定为10。这就是为什么我一次又一次地得到同样的结果

但我的问题是:有可能从未知的随机值中得到种子数吗

例如,我有一个随机列表:

mylist = [3, 2, 0, 1, 2] # 5 item with range of 0 to 5
我自己写了这个随机列表(我没有使用任何类型的程序),但是我可以使用
random
模块和loop的帮助生成相同的随机列表-只需在我以前的程序上的
random.seed()
函数中传递循环迭代即可

但是我想从“mylist”变量中获取种子值,而不需要循环,如下所示:

def GetSeed(mylist,start_range,stop_range):
    return "And The Program returned the seed number"

这可能吗?

尽管这不是最好的解决方案,但您可以尝试使用暴力强制。也就是说,按照您遵循的相同算法为每个数字创建列表,从0开始,直到得到结果。
GetSeed
函数如下所示:

def GetSeed(mylist, start_range, stop_range):
    listlen = len(mylist)
    i = 0
    randomlist = []

    while randomlist != mylist:
        random.seed(i)
        randomlist = random.sample(range(start_range, stop_range), listlen)

        i += 1
        
    return i - 1
此算法有时会产生与所用种子不同的结果,尤其是对于样本范围较小的列表。这是因为有些种子会提供与其他种子相同的列表。因此,您将只能获得给出列表的最小种子,而不是实际使用的种子。例如,运行
GetSeed([4,0,1,2,3],0,5)
将返回6而不是10。这是因为,如果你在最初的例子中给出种子6,你会得到与种子10相同的结果。然而,我认为任何解决这个问题的方法都会有这个缺点


通常,样本范围越小,发生这种情况的可能性越高。这是真的,因为当你限制你的射程,更有可能的是,两个产生不同数字的种子最终在列表中给出了相同的数字。

Python使用Mersenne绕口令:
start\u range
stop\u range
的含义是什么?检查下面的答案,如果函数返回的种子值超过1,也可以。这些种子总是返回预期的列表。。。但这不是一个解决方案,因为正如我在帖子中提到的,循环是不可接受的,因为如果我花费我的random.sample(范围(a,b),c),那么它需要更多的时间和计算能力来找到种子,这就是为什么我要求一个不带任何循环返回种子值的算法,我没有注意到你想要一个没有循环的解决方案;但我不确定这是否可行。