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

自定义stddev函数计算标准差返回0.0的原因排查求助

问题原因与修复方案

你的stddev函数返回0.0的核心问题是没有对数值与均值的差进行平方计算。

根据标准差的定义,需要先计算「每个数减去均值的差的平方和」,但你当前代码里只是累加了(xs[i] - average)——而数学上,一组数据中所有数值与均值的差的总和必然为0(高于均值的部分和低于均值的部分会完全抵消),所以最终sum的值是0,除以元素个数后还是0,开根号自然得到0.0。

修正后的代码

import math
def mean(xs):
    total = 0
    for i in range(len(xs)):
        total += xs[i]
    return total / len(xs)

def stddev(xs):
    average = mean(xs)
    sum_squares = 0
    # 直接遍历列表元素,比用索引更直观
    for num in xs:
        sum_squares += (num - average) ** 2
    # 用len(xs)直接获取元素个数,符合作业要求
    variance = sum_squares / len(xs)
    return math.sqrt(variance)

sample_list = [15, 10, 30, 50, 40]
print(stddev(sample_list))  # 预期输出:约15.811

关键修正点

  • 将累加(xs[i] - average)改为累加(num - average) ** 2,符合标准差的计算逻辑
  • 去掉了多余的count变量,直接使用len(xs)获取元素数量,满足作业限制
  • 优化了遍历方式,直接遍历列表元素,让代码更简洁易读

内容的提问来源于stack exchange,提问作者Hayoung Ryow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:05:33