题目: 根据权重随机选择键 (Python)
给定一个带有权重的字典,请编写一个函数 random_key
,该函数根据权重以比例概率随机返回一个键。
示例 1:
输入:
weights = {'A': 1, 'B': 2}
输出:
random_key(weights) -> 以1/3的概率返回A,以2/3的概率返回B
示例 2:
输入:
weights = {'A': 1, 'B': 1}
输出:
random_key(weights) -> 以1/2的概率返回A,以1/2的概率返回B
答案
解题思路
这个问题的关键在于根据给定的权重比例随机选择一个键。我们可以通过以下步骤解决这个问题:
- 计算权重总和。
- 根据权重比例创建一个累积权重列表。
- 生成一个随机数并根据该随机数确定返回哪个键。
Python字典和循环语句的用法在之前的题目中有介绍过,链接贴在下面:
答案代码
import random
def random_key(weights):
# 计算权重总和
total_weight = sum(weights.values())
# 构建累积权重列表
cumulative_weights = []
current_weight = 0
for key, weight in weights.items():
current_weight += weight
cumulative_weights.append((current_weight, key))
# 生成一个0到总权重之间的随机数
rand_num = random.uniform(0, total_weight)
# 确定随机数落在哪个区间
for cumulative_weight, key in cumulative_weights:
if rand_num < cumulative_weight:
return key
# 示例1
weights1 = {'A': 1, 'B': 2}
print(random_key(weights1)) # 以1/3的概率返回A,以2/3的概率返回B
# 示例2
weights2 = {'A': 1, 'B': 1}
print(random_key(weights2)) # 以1/2的概率返回A,以1/2的概率返回B
更多详细答案可关注公众号查阅。