📜  如何在Python中获得加权随机选择?(1)

📅  最后修改于: 2023-12-03 14:52:51.356000             🧑  作者: Mango

如何在Python中获得加权随机选择?

有时候,我们需要从有权重的一组元素中进行随机选择。在Python中,我们可以使用一些简单的技巧来进行加权随机选择。

方法1:使用random.choices

使用Python内置的random.choices函数可以轻松地从具有权重的列表中进行加权随机选择。下面是一个示例代码:

import random

elements = ['a', 'b', 'c', 'd']
weights = [10, 20, 30, 40]

result = random.choices(elements, weights)
print(result)

这个代码片段中,我们定义了一个元素列表和对应的权重列表,并将它们传递给random.choices函数中,它会返回一个随机选择的元素。

方法2:自己实现加权随机选择

如果你想自己实现加权随机选择的算法,你可以使用一个自己编写的函数。

以下是一个基于二分查找的加权随机选择函数的示例代码:

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函数中,它将返回一个随机选择的元素。

以上两种方法中,第一种方法简单易用,但是它只适用于具有权重的列表,而第二种方法可能需要更多的代码和实现,但是它可以应用于任何可迭代的元素和相应的权重。