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

2024-05-19 08:59:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想生成一个随机整数列表,所以我使用这个程序,并将种子设置为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模块和循环的帮助生成相同的随机列表-只需在我以前的程序上的random.seed()函数中传递循环迭代

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

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

这可能吗


Tags: sampleimport程序列表withrange整数random
1条回答
网友
1楼 · 发布于 2024-05-19 08:59:43

尽管这不是最好的解决方案,但您可以尝试使用蛮力强制。也就是说,按照您遵循的相同算法为每个数字创建列表,从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相同的结果。然而,我认为任何解决这个问题的方法都会有这个缺点

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

相关问题 更多 >

    热门问题