python – 避免从随机生成重复值

我想生成随机数并将它们存储在列表中,如下所示:

alist = [random.randint(0, 2 ** mypower - 1) for _ in range(total)]

我关注的是:我想在(0,2 ** mypower – 1)范围内生成总计= 4000万的值.如果mypower = 64,则alist的大小约为20GB(40M * 64 * 8),这对我的笔记本电脑内存来说非常大.我有一个想法,迭代生成一大块值,一次说500万,并将它们保存到一个文件,这样我就不必一次生成所有40M值.我担心的是,如果我在循环中执行此操作,则可以保证random.randint(0,2 ** mypower – 1)不会生成已经从上一次迭代生成的值吗?像这样的东西:

        for i in range(num_of_chunks):
            alist = [random.randint(0, 2 ** mypower - 1) for _ in range(chunk)]
            # save to file

最佳答案 好吧,既然效率/速度无关紧要,我认为这样可行:

s = set()
while len(s) < total:
    s.add(random.randint(0, 2 ** mypower - 1))
alist = list(s)

由于集合中只能包含唯一元素,我认为这样可以很好地工作

点赞