蟒蛇问题。我正在生成大量对象,我只需要制作一个小的随机样本。实际上生成有问题的对象需要一段时间,所以我想知道是否有可能以某种方式跳过那些不需要生成的对象,而只显式地创建那些已经采样的对象。
换句话说,我现在有
a = createHugeArray()
s = random.sample(a,len(a)*0.001)
这是相当浪费的。我更喜欢更懒惰的东西
a = createArrayGenerator()
s = random.sample(a,len(a)*0.001)
我不知道这是否有效。random.sample 上的文档不太清楚,尽管它提到 xrange 非常快 - 这让我相信它可能会起作用。将数组创建转换为生成器会有点工作(我对生成器的了解非常生疏),所以我想提前知道这是否有效。:)
我可以看到的另一种方法是通过 xrange 制作随机样本,并且只生成那些实际通过索引选择的对象。不过,这不是很干净,因为生成的索引是任意且不必要的,我需要相当老套的逻辑来在我的 generateHugeArray 方法中支持这一点。
对于加分:random.sample 是如何实际工作的?特别是,如果它事先不知道人口的规模,它是如何工作的,比如像 xrange 这样的生成器?