Python 加權(quán)隨機(jī)

本方法的原理是把所有權(quán)重的數(shù)值相加得到一個(gè)權(quán)重的總和,然后在 1 到總和之間隨機(jī)選取一個(gè)整數(shù)。把權(quán)重由小到大按升序排列,依此把權(quán)重相加,直到大于或等于選取的隨機(jī)數(shù)為止,此時(shí)記相機(jī)次數(shù)為n,列表的第 n-1 項(xiàng)即為輸出的加權(quán)隨即項(xiàng)。

# 選項(xiàng)
list = ['A', 'B', 'C']

# 權(quán)重,升序排列
weighted = [1, 2, 4]

def weighted_random(list, weighted):
    # 從1到權(quán)重之和間隨機(jī)抽取一個(gè)整數(shù)
    r = random.randint(1, sum(weighted)) 

    # 把權(quán)重依此相加,直到大于或等于隨機(jī)數(shù)r,相加的次數(shù)記為n,跳出循環(huán)
    # 從選項(xiàng)列表中取 n-1 位作為輸出的加權(quán)隨機(jī)數(shù)
    c = 0
    for index, w in enumerate(weighted):
        c = c + w
        if c >= r:
            return (list[index])
            break

可以用以下代碼驗(yàn)證下本方法:

all = []
for i in range(700):
    all.append(weighted_random(list, weighted))
print('A:', all.count("A"))
print('B:', all.count("B"))
print('C:', all.count("C"))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容