0

重複の可能性:
置換あり/なしの加重ランダム選択

項目の長いオブジェクト リストがあります。確率に基づいてリストからアイテムをランダムに選択したい。リストは次のようになります。

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) が返される可能性が高くなります。これは、ヒット値が最も高いためです。

4

1 に答える 1

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
于 2012-09-21T19:40:54.953 に答える