从给定概率为p的列表中选择数字

时间:2018-03-27 06:03:20

标签: python-3.x

假设我有一个数字列表[1,2,3,...,100]。现在我想从列表中选择数字,其中每个数字被接受或拒绝,给定的概率为0< p< 1。然后将接受的号码存储在单独的列表中。我怎么能这样做?
主要问题是选择概率为p的数字。是否有内置功能?
p的值由用户给出。

1 个答案:

答案 0 :(得分:1)

您可以使用random.random()和列表理解:

import random

l = [1,2,3,4,5,6,7,8,9]

k = [x for x in l if random.random() > 0.23] # supply user input value here as 0.23

print(l)
print(k)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7]

检查列表中的每个元素是否具有>的概率。 0.23留在名单中。

旁注:

random.choices()能够接受权重:

random.choices(population, weights=None, *, cum_weights=None, k=1)

但只有才能改变给定列表中的概率以绘制其中一个元素(绝对或相对权重是可能的) - 但这不适用于“独立”概率。