我使用random.sample
取決於輸入負載從一個非常大的範圍內採樣。有時樣本本身非常大,因爲它是一個列表,它佔據了大量的記憶。python是否有內置的方式來返回一個列表生成器,而不是從random.sample的列表
該應用程序不一定使用列表中的所有值。 如果random.sample
可以返回列表生成器而不是列表本身,那將是非常好的。
現在我有一個包裝,它將大輸入範圍劃分成相同大小的桶,並使用randint
從每個n/sample_size
桶中選擇一個隨機數。
編輯:在我的情況下輸入是連續的,我有這個包裝函數來模擬random.sample作爲一個生成器,但這不是真正的複製功能,因爲它在最後跳過一些元素。
import random
def samplegen(start, end, sample_size):
bktlen = (end - start)/sample_size
for i in xrange(sample_size): #this skips the last modulo elements
st = start + (i * bktlen)
yield random.randrange(st, st + bktlen)
要做'random.sample'作爲一個生成器,你必須跟蹤你已經放棄的項目,所以你可以避免再次使用它們。這將使用與返回列表一樣多的內存。 – kindall
@ kindall這就是爲什麼我將輸入範圍拆分爲桶並從每個桶中僅選擇一個數字,並且桶的數量基於樣本大小。我應該提到輸入是連續範圍的數字,如xrange(0,1000000) – user881300
@ user881300'xrange(0,1000000)'的random.sample是如何產生問題的?這並不大。 –