使用python从带有替换的列表中选择一个随机元素

时间:2014-12-02 14:40:43

标签: python select random

我有40个元素的列表。我试图估计我需要多少次采样此列表才能重现该列表中的所有元素。但是,重要的是我替换拾取的元素。即我可能会选择相同的元素20次。到目前为止,我有以下

import random
l = range(0,40)

seen=[]
x=0
while len(seen)<len(l):
    r = random.choice(l)
    if r not in seen:
        seen.append(r)
        x=x+1
print x

然而,这总是回归,它需要40次来完成我想要的。但是,这是因为从未选择过两次单个元素。 最终我会运行这个函数1000次,以了解我需要采样的频率。 一如既往,谢谢

2 个答案:

答案 0 :(得分:3)

您只需调整x=x+1的缩进即可。因为现在你只是增加,如果之前没有看到这个值。

如果您经常使用大量商品,可以使用set作为seen变量,因为访问项目为faster in avarage

l = range(0, 40)
seen = set()
x = 0
while len(seen) < len(l):
    r = random.choice(l)
    if r not in seen:
        seen.add(r)
    x = x + 1
print x

答案 1 :(得分:1)

这是一种类似的方法。初始化set,根据定义,它可能只包含唯一元素(无重复项)。然后继续使用random.choice()从列表中选择一个元素。您可以将您的设置与原始列表进行比较,直到它们的大小相同,您就不会拥有所有元素。保持计数器以查看它需要多少随机选择。

import random

def sampleValues(l):
    counter = 0
    values = set()
    while len(values) < len(l):
        values.add(random.choice(l))
        counter += 1
    return counter

>>> l = list(range(40))

这个数字会有所不同,蒙特卡洛可以获得一些统计数据

>>> sampleValues(l)
180
>>> sampleValues(l)
334
>>> sampleValues(l)
179