2012-09-21 93 views
0

可能重复从对象列表选择项目:
Weighted random selection with and without replacement的Python:基于概率

我有一个项目长对象列表。我想根据概率从列表中随机选择一个项目。名单如下所示:

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

另一个可能的欺骗:[如何做在python类别的加权随机样本](http://stackoverflow.com/q/6432499) –

回答

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 
+0

这不会返回大小为“n”的样本,只会挑选一个项目。 –

+0

添加了调用weightedRandom n次的函数。 – DigitalGhost

+0

该方法允许重复,我不认为这是OP想要的。 –