可能重复:
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)返回的概率更高,因为它具有最高的命中值。
答案 0 :(得分:0)
不是最快的解决方案,但它得到了重点:
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