Python遇多个众数时解决statistics.mode报错并计算众数均值
解决多众数场景下的平均值计算问题
Python的statistics.mode()方法仅支持返回唯一众数,当列表存在多个出现频率相同的众数时会抛出StatisticsError。要实现多众数时计算其平均值,我们可以手动统计元素频率,筛选出所有众数后再计算均值,具体实现如下:
解决方案代码
import statistics from collections import Counter # 原始字符串列表,先转换为数值类型 numbers = ['3', '3', '4', '4'] num_list = [int(num) for num in numbers] # 统计每个元素的出现频率 freq_counter = Counter(num_list) # 获取最高出现频率 max_freq = max(freq_counter.values()) # 筛选出所有众数 modes = [num for num, count in freq_counter.items() if count == max_freq] # 计算结果:单众数返回该值,多众数返回平均值 if len(modes) == 1: result = modes[0] else: result = statistics.mean(modes) print(f'Result: {result}')
代码说明
- 类型转换:原始列表元素是字符串类型,需先转换为
int(或float)才能进行数值计算 - 频率统计:使用
collections.Counter可以高效统计每个元素的出现次数 - 众数筛选:通过对比元素频率与最高频率,找出所有符合条件的众数
- 结果计算:判断众数数量,单个则直接返回,多个则用
statistics.mean()计算平均值
运行上述代码,输入列表['3','3','4','4']会输出Result: 3.5,符合需求。
内容的提问来源于stack exchange,提问作者MYW
相关产品推荐
相关产品推荐

