【数据分析面试】47.根据权重随机选择键 (Python)

在这里插入图片描述

题目: 根据权重随机选择键 (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

答案

解题思路

这个问题的关键在于根据给定的权重比例随机选择一个键。我们可以通过以下步骤解决这个问题:

  1. 计算权重总和。
  2. 根据权重比例创建一个累积权重列表。
  3. 生成一个随机数并根据该随机数确定返回哪个键。

Python字典和循环语句的用法在之前的题目中有介绍过,链接贴在下面:

  1. 寻找给小费最多的客人(Python:字典用法)
  2. 矩阵元素求和 (Python:for…in…语句)

答案代码

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

更多详细答案可关注公众号查阅。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值