📅  最后修改于: 2023-12-03 14:52:51.356000             🧑  作者: Mango
有时候,我们需要从有权重的一组元素中进行随机选择。在Python中,我们可以使用一些简单的技巧来进行加权随机选择。
使用Python内置的random.choices函数可以轻松地从具有权重的列表中进行加权随机选择。下面是一个示例代码:
import random
elements = ['a', 'b', 'c', 'd']
weights = [10, 20, 30, 40]
result = random.choices(elements, weights)
print(result)
这个代码片段中,我们定义了一个元素列表和对应的权重列表,并将它们传递给random.choices函数中,它会返回一个随机选择的元素。
如果你想自己实现加权随机选择的算法,你可以使用一个自己编写的函数。
以下是一个基于二分查找的加权随机选择函数的示例代码:
import random
def weighted_choice(choices):
total = sum(w for c, w in choices)
r = random.uniform(0, total)
upto = 0
for c, w in choices:
if upto + w > r:
return c
upto += w
assert False, "Shouldn't get here"
elements = ['a', 'b', 'c', 'd']
weights = [10, 20, 30, 40]
choices = list(zip(elements, weights))
result = weighted_choice(choices)
print(result)
这个代码片段中,我们首先将元素列表和权重列表打包成一个元组列表(即元素和对应的权重配对),然后将它们传递给自己编写的weighted_choice函数中,它将返回一个随机选择的元素。
以上两种方法中,第一种方法简单易用,但是它只适用于具有权重的列表,而第二种方法可能需要更多的代码和实现,但是它可以应用于任何可迭代的元素和相应的权重。