设计思路:
- 产生一个0到1的随机数
- 循环遍历需要产生概率的列表,以及对应的概率列表
- 判断随机数是否比第一个数小,小的话就直接返回,并且结束循环,否则就进行下次循环,现在可以肯定比上一个数大,所以让第一个概率加上第二个概率再和产生的随机数进行比较。以此类推。
函数实现:
import random
def random_pick(some_list,probabilitie_list):
x=random.uniform(0, 1)
cumulative_probability = 0.0
for item,item_probability in zip(some_list,probabilitie_list):
cumulative_probability = cumulative_probability + item_probability
if x < cumulative_probability:
break
return item
参数说明:
- some_list:求概率的列表
- probabilitie_list:概率列表
测试函数:
i=0
while i<100:
i+=1
print random_pick(['a','b','c','d'],[0.4,0.2,0.3,0.1])