如何修改Python列表众数计算代码,多众数时优先返回较小值
众数计算逻辑优化
你当前使用的原有代码如下:
def mode(list): modelist = max([list.count(x) for x in list]) return [i for i in list if list.count(i) == modelist][0]
原有代码的问题是:仅返回原列表中第一个达到最高频次的元素,当多个元素频次相同时,无法保证返回数值最小的元素,例如输入[5,2,2,5]时返回5,不符合需求。
最简修改方案
只需在筛选出所有符合最高频次的元素后取最小值即可,同时可以用去重后的集合遍历减少重复计算,修改后代码如下:
def mode(list): max_count = max([list.count(x) for x in list]) return min([i for i in set(list) if list.count(i) == max_count])
效果验证
输入测试用例[5,2,2,5]时,筛选出的符合最高频次的元素为2、5,取最小值后返回2,符合预期。
大列表高效优化方案
原有代码多次调用list.count(),每次调用都会遍历一次全列表,时间复杂度较高,处理长列表时可以用collections.Counter做频次统计,优化后代码如下:
from collections import Counter def mode(list): count_map = Counter(list) max_count = max(count_map.values()) return min(k for k, v in count_map.items() if v == max_count)
内容的提问来源于stack exchange,提问作者Keegry
相关产品推荐
相关产品推荐

