Python3.9.5无statistics.multimode属性 求众数列表获取替代方案
问题原因
statistics.multimode是Python 3.10版本才新增的标准库接口,3.9及更早版本的标准库中没有该方法,因此会抛出AttributeError报错。
替代解决方案
优先推荐无第三方依赖的实现方案,仅需使用Python标准库自带的collections.Counter即可实现完全一致的multimode效果,返回结果的顺序、逻辑和Python 3.10+官方的statistics.multimode完全对齐,无需修改其他业务逻辑:
步骤1:自定义multimode函数
from collections import Counter def multimode(data): # 处理空输入的边界情况 if not data: return [] # 统计所有元素的出现频率 counter = Counter(data) # 提取最高出现频率 max_frequency = max(counter.values()) # 返回所有频率等于最高频率的元素列表 return [item for item, freq in counter.items() if freq == max_frequency]
步骤2:替换原有业务代码
将原来调用statistics.multimode的代码替换为调用上述自定义函数即可,同时优化了原代码重复计算的问题:
# 移除原有的import statistics行,替换为以下导入和函数定义 from collections import Counter def multimode(data): if not data: return [] counter = Counter(data) max_frequency = max(counter.values()) return [item for item, freq in counter.items() if freq == max_frequency] # ... 其他原有业务代码 values = multimode(vars) valuesCount = len(values) # ... 其他原有业务代码
可选优化建议
- 建议将变量名
vars修改为其他自定义名称,避免覆盖Python内置的vars()函数,引发意料之外的错误。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

