自定义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
相关产品推荐
相关产品推荐

