You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基于随机逻辑实现按概率返回版本的通用函数开发问题

Python 按指定概率返回对应版本的通用函数

实现逻辑

我们采用累积概率区间匹配法实现,逻辑简单且效率高,支持任意比例的概率配置,能保证版本命中概率完全符合设定值:

  • 先做输入合法性校验,避免入参错误导致结果不符合预期
  • 基于概率列表计算累积概率区间
  • 生成[0,1)范围内的均匀随机数,匹配随机数落在的累积区间,返回对应版本

完整实现代码

import random
import bisect
import math

def pick_version_by_prob(versions: list, probabilities: list):
    # 入参合法性校验
    if len(versions) != len(probabilities):
        raise ValueError("版本列表长度与概率列表长度必须一致")
    for p in probabilities:
        if p < 0:
            raise ValueError("概率值不能为负数")
    if not math.isclose(sum(probabilities), 1, rel_tol=1e-9):
        raise ValueError("所有概率的总和必须等于1")
    
    # 计算累积概率区间
    cum_probs = []
    current_sum = 0
    for p in probabilities:
        current_sum += p
        cum_probs.append(current_sum)
    
    # 生成随机数匹配对应区间
    rand_val = random.random()
    idx = bisect.bisect_left(cum_probs, rand_val)
    return versions[idx]

使用示例

# 示例配置:3个版本,对应概率分别为1/2、1/3、1/6
versions = ["v1.0", "v2.0", "v3.0"]
probs = [1/2, 1/3, 1/6]

# 单次调用函数获取随机版本
print(pick_version_by_prob(versions, probs))

分布均匀性验证

可以通过多次调用统计命中频率,验证分布符合预期:

# 统计10万次调用的命中情况
count = {"v1.0": 0, "v2.0": 0, "v3.0": 0}
test_times = 100000
for _ in range(test_times):
    ver = pick_version_by_prob(versions, probs)
    count[ver] += 1

# 输出各版本实际命中频率
for ver, cnt in count.items():
    print(f"{ver} 命中频率:{cnt / test_times:.4f}")

运行后输出结果和设定概率完全吻合,示例输出参考:

v1.0 命中频率:0.5002
v2.0 命中频率:0.3331
v3.0 命中频率:0.1667

内容的提问来源于stack exchange,提问作者Komal G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:27:00