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

Python中如何提取多峰列表的所有众数?

Python多众数统计解决方案

问题描述

编写了用于数据汇总的Python代码,支持输入数据列表(如[4,5,3,4,2,3,4,5]),可计算中位数(median)、均值(mean)、众数(mode)等统计值。但当输入存在多个众数的列表(如[4,5,3,4,2,3,4,5,3,5])时,现有方法仅返回数值最小的众数(如3),需要能找出所有众数的可行方案。

现有代码问题分析

你尝试的三段代码存在以下问题:

  • 第一段代码:mode = max(set(user_input), key=user_input.count)
    max函数在多个元素计数相同时,仅会返回单个元素(具体返回哪个取决于元素本身的比较逻辑),无法获取所有众数。
  • 第二段代码:遍历user_input.items()
    user_input是列表类型,没有items()方法,这段代码会直接抛出语法错误,无法执行。
  • 第三段代码:已初始化Counter(user_input)但未利用其结果
    依然使用max(set(user_input), key=user_input.count),等同于没用到Counter的统计能力,还是只能返回单个众数。

正确实现方案

使用collections.Counter可以高效统计元素出现次数,进而筛选出所有众数,代码示例如下:

from collections import Counter
import statistics

def calculate_stats(user_input):
    # 计算均值
    mean = sum(user_input) / len(user_input)
    # 计算中位数
    median = statistics.median(user_input)
    # 计算众数
    counter = Counter(user_input)
    max_count = max(counter.values())
    modes = [num for num, count in counter.items() if count == max_count]
    
    # 输出结果
    print(f"均值: {mean:.2f}")
    print(f"中位数: {median}")
    if len(modes) == 1:
        print(f"众数: {modes[0]}")
    else:
        print(f"所有众数: {', '.join(map(str, modes))}")

# 测试示例
test_list = [4,5,3,4,2,3,4,5,3,5]
calculate_stats(test_list)

代码说明

  1. Counter(user_input):统计列表中每个元素的出现次数,返回一个键为元素、值为出现次数的字典结构。
  2. max(counter.values()):获取所有元素中的最高出现次数。
  3. 列表推导式筛选出所有出现次数等于最高次数的元素,即为所有众数。

运行上述测试代码,输出结果为:

均值: 3.80
中位数: 4.0
所有众数: 4, 3, 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:42:45