Python 加权随机

作者: 清醒的cola | 来源:发表于2017-02-27 11:45 被阅读468次
    稀有度随机

    问题1. 有一堆数据 x = [1,5,7],随机取出一个数?

    random.choice(x)
    

    问题2. 如何按照权重20 , 20 , 60取出一个数?

    我们可以把总和 100分成几个区间,0 - 19 分给 1, 20 - 39 分给 5, 40 - 99 分给7, 再随机0 - 99 看这个随机数落在哪个区间就可以了。

    import random
    import bisect
    
    m = [20, 20, 60]
    n = []
    count = 0 
    
    for i, v in enumerate(m):
        n.append(count)
        count += v
    
    rd = random.randint(0, count -1)
    r = bisect.bisect_right(n, rd)
    result = x[r]
    

    注意:m必须是排好顺序的,bisect二分查找binary search需要 bisect.bisect_right(n, rd) 插入的 rd 在 n 的位置。

    其中 n 的值可以使用

    from itertools import accumulate  
    n = list(accumulate(data))
    

    使用 Python 写算法的时候,注意多找找相关的第三方包,总有惊喜等着你。

    相关文章

      网友评论

        本文标题:Python 加权随机

        本文链接:https://www.haomeiwen.com/subject/ddlzwttx.html