我有一个包含大约40个字符串的列表,并希望为每个项目分配一个重量/百分比。在运行期间,我现在想要一个随机数发生器根据其百分比从列表中选择一个项目。这意味着,在足够大的样本大小上,此项目被拣选的次数将与指定的百分比相对应。我面临的一个问题是,将来我可能希望扩展列表,然后必须为其他项目分配新的百分比。保存此列表并为各个项目分配权重的最佳方法是什么?
我可以想一些实现这个的方法但是它们都很快而且很快脏,所以我希望有人有一个设计模式。我正在使用Python,但由于这是概念性的,我并不是真正想要明确的例子。
非常感谢你的帮助。
答案 0 :(得分:3)
查看此页面:Weighted random generation in Python
修改:也可以看到(在SO上):A weighted version of random.choice
答案 1 :(得分:1)
一种方法是使用范围作为字典键(可能是2元组),将字符串作为值。然后,您可以使用random.randint()
生成所有字典键值描述的范围内的整数。添加一个新字符串很容易,它的范围会将其他字符串推到一边(缩小它们的权重)。如果你不希望这种情况发生,那么无论如何你必须重新加权。
{
(0,10): "First string",
(11,50): "Second string",
(51,73): "Third string"
}