迭代器中的随机项?

问题描述 投票:1回答:1

我有以下代码

number_list = (i for i in range(5))
permutations = (num for num in itertools.product(number_list, repeat=9))

这是在生成一个名为 permutations 的9个字符的所有排列组合。number_list 如果我没记错的话 这可以得到相当大的一个大 number_list.

我可以通过迭代 permutationsnext(permutations) 但问题是,它是顺序的,我希望能够从迭代器的任何部分随机抽取一个项目。我希望能够从迭代器的任何部分随机抽取一个项目。如果它是一个列表,我可以简单地做以下操作 random.choice() 但对于一个大 number_list 我没有足够的记忆力,也没有足够的时间。

我也可以只用 next() 并存储一个X数量的项目列表,然后他们随机化,但这也不行,因为它可能会变得非常大,以至于输出的项目会非常相似,这就不是真正的 "随机"。

我想知道,如果不能从迭代器中随机抽取一个项目,有没有一种算法可以让我创建一个迭代器,这个迭代器将输出一个随机的集合,其内容为 next() 但当它结束时,它将会经历所有的排列组合,而不会重复?

最后的想法是有一个迭代器,它将吐出一个随机排列的 n 字库 i 元素,能够同时获得 ni 到任意大的数字,而没有内存限制,确保当整个迭代器结束时(什么时候结束并不重要,即使理论上它在几年后才结束),所有可能的排列组合将被穷尽,而不会重复。

python random iterator combinations combinatorics
1个回答
-1
投票

首先,你的代码没有生成permutations,而是用替换的方式抽取。其次,迭代器(顾名思义)的目的是通过某个集合进行迭代,而不是跳转到其中的随机位置(当然,你可以写你自己的代码) __next__ 函数,它可以做任何你想做的事情--你是否想把产生的对象称为迭代器是一个哲学问题)。) 第三,用替换的方式产生随机样本是一个被广泛研究和实现的问题。例如,请参见 https:/docs.scipy.orgdocnumpy-1.15.0referencegeneratednumpy.random.choice.html。

© www.soinside.com 2019 - 2024. All rights reserved.