【问题标题】:Unique variable with multiple set.seed()具有多个 set.seed() 的唯一变量
【发布时间】:2020-02-26 12:09:04
【问题描述】:

我想生成一个随机数 193 次,但设置一个种子,以便以后可以为每个实例获取相同的数字。因为,我找不到设置种子 X 次的函数,所以我写了以下代码:

rand_list_raw = []
val_length = int(len(all_articles)*0.15)
seeds = list(range(0,val_length))
index = 0

while len(rand_list_raw) < val_length:  
        seed = seeds[index]
        random.seed(seed)
        rand_num = random.randrange(0, 1290, 1)
        rand_list_raw.append(rand_num)
        index += 1

检查rand_list_raw 中唯一变量的长度,我得出结论random.seed() 具有多对一映射,因此具有不同数字的随机种子的多个实例可能会导致相同的结果。这实际上是有道理的,因为输入变量的范围是无限的,而输出变量的范围是有限的。

len(set(rand_list_raw))

有没有办法保证不同的数字(除了硬编码)?

附言。我知道我也可以在该范围内创建一个包含唯一随机数的列表并将其导出。但这不是重点。

【问题讨论】:

  • 除了“那不是重点”之外,你的“Ps”中的解决方案有什么问题?

标签: python python-3.x random


【解决方案1】:

为什么要播种 n 次?你可以从一个起始种子开始,并且总是有相同的顺序。考虑:

rand_dict = {}
rand_list = []
val_length = int(len(all_articles)*0.15)
seed = 1 #whatever you want
step = 0
random.seed(seed)
while len(rand_list_raw) < val_length: 
    step+=1
    rand_num = random.randrange(0, 1290, 1)
    try:
        test = rand_dict[rand_num] #check if key exists if it does we dont do anything
    except KeyError:
        rand_list.append(rand_num)
        rand_dict[rand_num] = step

然后,如果您想再次获得相同的数字。只需使用相同的种子再次播种,并使用生成器迭代存储在 dict 中的相同步数。

取回您的号码的示例。使用种子 = 1,步长 = 5 处的值为 241。

random.seed(seed)
step = rand_dict[241]
i = 0
while(i<step)
    buf = random.randrange(0,1290,1)
    i+=1
print(buf)
>> 241

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多