Python求数组最高频数字:max函数平局场景处理咨询
适配频次平局场景的代码调整方案
原代码的核心缺陷可以参考下面的说明:
max(dict1, key=dict1.get)的运行逻辑是遍历字典的所有键,将每个键对应的频次作为比较权重;当存在多个键的频次相等且为全局最高时,max函数只会返回遍历序列中第一个匹配到的键,无法覆盖全部同频次的最高值元素。
调整步骤
- 先从字典存储的所有频次值中,计算出全局最高的频次数值,不直接绑定具体数组元素
- 遍历字典的全部键值对,将所有频次等于全局最高值的元素收集为结果列表,即可覆盖平局场景
调整后完整代码
num = [1,2,3,2,1,2,2,4,5,4,4,4] dict1 = {} for val in num: if val in dict1: dict1[val] = dict1[val] + 1 else: dict1[val] = 1 # 计算全局最高频次 max_freq = max(dict1.values()) # 筛选所有匹配最高频次的元素 result = [item for item, freq in dict1.items() if freq == max_freq] print(result)
针对给出的测试数组,这段代码的最终输出为[2, 4],符合“平局时返回全部对应数字”的要求。
如果需要简化手动构建频次字典的循环逻辑,也可以直接使用Python标准库collections.Counter实现相同功能,代码更简洁:
from collections import Counter num = [1,2,3,2,1,2,2,4,5,4,4,4] freq_dict = Counter(num) max_freq = max(freq_dict.values()) result = [item for item, freq in freq_dict.items() if freq == max_freq] print(result)
内容的提问来源于stack exchange,提问作者Anu
相关产品推荐
相关产品推荐

