statistics.median()仅接受非空可迭代数值对象,自动排序后取中间值或均值;stdev()计算样本标准差(n−1),pstdev()计算总体标准差(n),二者均要求至少两个数值元素。

直接用 statistics.median() 和 statistics.stdev() 就行,但要注意数据类型、样本/总体选择,以及空数据或单元素的报错。
中位数计算:median() 能处理哪些输入?
statistics.median() 只接受可迭代对象(如 list、tuple),内部会自动排序并取中间值。它不关心数据是否为整数或浮点数,但要求所有元素可比较(比如不能混用 str 和 int)。
- 支持奇数长度:直接返回中间那个数,例如
median([1, 3, 5])→3 - 支持偶数长度:返回中间两数的平均值,例如
median([1, 2, 3, 4])→2.5 - 不支持空序列:
median([])会抛出StatisticsError - 不支持非数值类型混合:比如
[1, "2", 3]会触发TypeError
标准差计算:stdev() 和 pstdev() 到底该用哪个?
这是最容易搞混的地方:stdev() 默认按「样本标准差」算(分母是 n−1),而 pstdev() 是「总体标准差」(分母是 n)。如果你的数据就是全部总体(比如某班 30 人的全部成绩),该用 pstdev();如果是抽样估计(比如从流水线上随机取 30 个零件测尺寸),才用 stdev()。
-
stdev([1, 2, 3, 4, 5])→ 约1.581(n−1 自由度) -
pstdev([1, 2, 3, 4, 5])→1.414(n 自由度) - 两者都要求至少两个元素,
stdev([5])或stdev([])都会报StatisticsError - 和中位数一样,只支持数值,且不能有
None或字符串
常见错误:为什么我的代码跑出 StatisticsError: mean requires at least one data point?
这个错误不是只出现在 mean() 里——stdev()、pstdev()、median() 全部会在空输入时抛出类似提示,只是消息里还写着 mean(因为底层共用校验逻辑)。根本原因是你传了空列表、空元组,或者生成器已耗尽。
立即学习“Python免费学习笔记(深入)”;
- 检查输入是否真的非空:
if not data:提前拦截 - 避免误传生成器多次:比如
data = (x for x in range(0)),用完就空了,再传给median(data)就崩 - 读文件或 API 返回的数据可能为空,别跳过判空直接喂给 statistics 函数
- 注意 NumPy 或 pandas 用户容易混淆:
statistics模块不接受np.array或pd.Series直接传入(会报TypeError),得先转成 list:list(series)
真正麻烦的不是函数怎么调,而是你得想清楚:这组数到底是样本还是总体?有没有漏掉空值或类型异常?一旦数据来源不可控,光靠 statistics 模块本身没法兜底。


















