Python高频数字查找函数异常:同频应返回较大值却出错
问题分析与修复
原函数的错误点
- 频率统计逻辑彻底错误:原代码第一次遇到元素时将计数设为
0,仅当元素重复出现时才调用arr.count(i)设置次数。对于只出现一次的元素,计数永远是0,完全背离了统计频率的目的。 - 未处理频率相同的场景:即使频率统计正确,原
max函数仅以频率作为判断依据,当多个元素频率相同时,无法返回数值更大的那个。
修复后的实现
可以用Python内置的collections.Counter高效统计频率,同时调整max的判断规则——先按频率排序,频率相同时按元素值排序:
from collections import Counter def highest_rank(arr): count = Counter(arr) # 优先按频率降序,频率相同则按元素值降序取最大值 return max(count, key=lambda x: (count[x], x))
测试验证
针对测试用例[9, 48, 1, 8, 44, 45, 32],所有元素频率均为1,此时会返回数值最大的48,完全符合预期。
不依赖Counter的手动实现
如果不想使用collections模块,也可以手动完成正确的频率统计:
def highest_rank(arr): count_num = {} for num in arr: # 正确累加计数:存在则+1,不存在则初始化为1 count_num[num] = count_num.get(num, 0) + 1 # 同样以(频率, 数值)作为判断key return max(count_num, key=lambda x: (count_num[x], x))
内容的提问来源于stack exchange,提问作者TAHER El Mehdi
相关产品推荐
相关产品推荐

