我希望从一个列表中随机选择一个单词,其中每个单词都有一个已知的机会,例如:
概率果
橙色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/