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

Python的random.choices是否存在偏差?实验异常结果咨询

问题根因

你传入random.choices()的采样列表存在元素错误,并非你预期的「等概率返回-4到4之间的整数」:

  • 你使用的采样列表为 [-4,-3,-2,1,0,1,2,3,4],共9个元素,缺失了-1,却重复包含了两次1
  • 单次采样的期望值计算如下:每个元素被选中的概率为1/9,所有元素求和结果为 (-4)+(-3)+(-2)+1+0+1+2+3+4 = 2,因此单次采样期望为 2/9 ≈ 0.222,远不等于0

10000次累加后的总和期望为 10000 * 2/9 ≈ 2222,远大于0,因此几乎不会出现总和小于0的情况,你观测到的100次全大于0的结果完全符合概率预期。

修正方法

如果要实现等概率采样-4到4的全部整数,调整采样列表即可,且采样单个元素直接用random.choice()更简洁,不需要choices()[0]的写法:

import random as r
bigger_than_zero=0
smaller_than_zero=0
# 修正后的采样列表,覆盖-4到4所有整数,无重复无缺失
sample_list = [-4,-3,-2,-1,0,1,2,3,4]
for k in range(0,100):
    a=0
    for i in range(0,10000):
        a=a+r.choice(sample_list)
    if a>0:
        bigger_than_zero+=1
    elif a<0:
        smaller_than_zero+=1
print(bigger_than_zero)
print(smaller_than_zero)

修正后单次采样期望为0,10000次累加的总和会围绕0呈正态分布,最终大于0和小于0的次数会基本接近。

内容的提问来源于stack exchange,提问作者Marco Montevechi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:54:02