我希望从一个列表中随机选择一个单词,其中每个单词都有一个已知的机会,例如:
概率果
橙色0.10
苹果0.05
芒果0.15

如何才能最好地实现这一点?我将从实际的清单是多达100个项目,并不是所有的统计到100%他们确实不足以说明项目,有一个非常低的机会发生理想情况下,我想从CSV中获取这个数据,CSV是我存储这些数据的地方这不是一项时间紧迫的任务。
谢谢你对如何最好地进行的任何建议。

最佳答案

如果为每个项目分配一个与其概率成比例的数字范围,则可以选择具有加权概率的项目,选择一个介于零和范围之和之间的随机数,并找到与之匹配的项目。下面的类正是这样做的:

from random import random

class WeightedChoice(object):
    def __init__(self, weights):
        """Pick items with weighted probabilities.

            weights
                a sequence of tuples of item and it's weight.
        """
        self._total_weight = 0.
        self._item_levels = []
        for item, weight in weights:
            self._total_weight += weight
            self._item_levels.append((self._total_weight, item))

    def pick(self):
        pick = self._total_weight * random()
        for level, item in self._item_levels:
            if level >= pick:
                return item

然后,您可以使用csv模块加载csv文件并将其馈送到WeightedChoice类:
import csv

weighed_items = [(item,float(weight)) for item,weight in csv.reader(open('file.csv'))]
picker = WeightedChoice(weighed_items)
print(picker.pick())

关于python - 如何在Python中从已知百分比的列表中选择一项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1556232/

10-10 16:33
查看更多