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

Python编写均值中位数众数计算器时min()函数返回值错误如何解决

Python均值/中位数/众数计算器mode函数修复方案

问题根因

  • 核心问题来自Python不同版本statistics.mode的行为差异:
    • Python 3.8及更早版本:当数组存在多个相同最高频次的众数时,会抛出StatisticsError,此时代码会进入异常分支返回最小值,逻辑符合预期
    • Python 3.10及更高版本:当数组存在多个相同最高频次的众数时,不会抛出异常,会直接返回第一个出现的最高频次元素,因此不会执行min(new_arr)的逻辑,导致返回结果不符合预期

修复方案

不要依赖statistics.mode的异常逻辑处理多众数场景,自己实现频次统计逻辑,兼容所有Python版本,可直接替换原有mode函数:

from collections import Counter

def mode(split_arr):
    new_arr = [int(i) for i in split_arr]
    # 统计每个元素的出现频次
    count = Counter(new_arr)
    # 取最高频次值
    max_freq = max(count.values())
    # 筛选所有达到最高频次的元素,返回最小值
    mode_candidates = [num for num, freq in count.items() if freq == max_freq]
    return min(mode_candidates)

可选优化(非必须)

小提示:输入处理部分可以把arr = raw_arr.split(" ")改成arr = raw_arr.split(),可以避免输入首尾带空格、元素之间多个空格导致的转int报错问题。

如果使用Python 3.8及以上版本,也可以改用官方提供的statistics.multimode直接获取所有众数再取最小,代码更简洁:

def mode(split_arr):
    new_arr = [int(i) for i in split_arr]
    all_modes = statistics.multimode(new_arr)
    return min(all_modes)

内容的提问来源于stack exchange,提问作者Adit Magotra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:42:03