Python:根据概率从对象列表中选择项

2024-06-28 19:54:08 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Weighted random selection with and without replacement

我有一个长长的物品清单。我想根据概率从列表中随机选择一个项目。列表如下所示:

class Item:
  def __init__(self, pid, hits, qtyPerOrder):
    self.pid = pid
    self.bay = hits
    self.qtyPerOrder = int(qtyPerOrder)

itemList = [('RGSCAF', 181  ,6), ('WAR10227', 54    ,3), ('AD2020WOC', 31   ,4)]

基本上,我需要一个函数,它将遍历列表,根据命中率分配概率权重,然后根据概率随机选择n个对象。所以在这个例子中,返回对象('RGSCAF',181,6)的概率更高,因为它具有最高的命中值。在


Tags: and对象self列表withrandom概率pid
1条回答
网友
1楼 · 发布于 2024-06-28 19:54:08

不是最快的解决方案,但它能让人明白:

def getNWeightedRandoms(n):
    retval = []
    for x in xrange(0,n):
        retval.append(weightedRandom())
    return retval

def weightedRandom():
    sum = 0
    for item in itemList:
        sum += item.bay
    i = random.randint(0,sum-1)
    for item in itemList:
        i -= item.bay
        if i<0:
            return item

相关问题 更多 >