设计思路:

  • 产生一个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])
Last modification:September 22, 2019
If you think my article is useful to you, please feel free to appreciate