直接用statistics.median()和variance()即可,但需注意数据类型兼容性、样本/总体区分(variance除n-1、pvariance除n)、空数据或单元素报错等关键细节。

直接用 statistics.median() 和 statistics.variance() 就行,但要注意数据类型、样本/总体区分,以及空数据或单元素的报错场景。
中位数计算:别被奇偶长度搞晕,median() 自动处理
statistics.median() 内部已按升序排序并取中间值,无需手动排序。它对奇数长度取正中间,偶数长度取中间两数平均——这点和手算一致。
- 输入必须是可迭代对象(如
list、tuple),不能是单个数字或None - 支持
int、float、甚至Fraction和Decimal,但所有元素类型需兼容比较(比如混用str和int会抛TypeError) - 空序列会触发
StatisticsError: no median for empty data,需提前判断
示例:
import statistics print(statistics.median([1, 3, 5])) # → 3 print(statistics.median([1, 3, 5, 7])) # → 4.0
方差计算:分清 variance() 和 pvariance()
statistics.variance() 默认按**样本方差**公式计算(除以 n-1),而 statistics.pvariance() 按**总体方差**(除以 n)。这是最容易出错的地方——如果你的数据就是全部总体(比如某班全部 20 人的成绩),该用 pvariance();如果只是抽样(比如随机测了 20 人推断全市水平),才用 variance()。
- 两者都要求至少两个数据点,否则抛
StatisticsError: variance requires at least two data points - 若只有一条数据,可用
statistics.pvariance([x])得到 0,但variance([x])必报错 - 数值精度上,它们内部用两遍扫描算法,比手动写
sum((x - mean)**2) / (n-1)更稳定(尤其对大数或相近数)
示例:
data = [2, 4, 4, 4, 5, 5, 7, 9] print(statistics.variance(data)) # 样本方差 ≈ 4.0 print(statistics.pvariance(data)) # 总体方差 ≈ 3.5
常见报错与绕过技巧
实际用时最常卡在三类错误:StatisticsError、类型不匹配、以及误用样本/总体函数。
-
StatisticsError: no data:检查输入是否为空列表或生成器已耗尽;可用if not data:防御 -
TypeError: unsupported operand type(s):确认没混入None、str(除非是纯数字字符串且你显式转了) - 想算标准差?别自己开方——直接用
statistics.stdev()(样本)或statistics.pstdev()(总体),它们复用方差逻辑,精度更高 - 需要带权重的中位数或方差?
statistics模块不支持,得换numpy或手写加权逻辑
真正麻烦的不是调用函数,而是搞清你的数据到底算「样本」还是「总体」,以及有没有隐性空值或类型污染——这两个点漏掉,结果可能偏差很大,但错误却不明显。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











