You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升Python字符统计函数的执行效率?

优化字符频次统计函数的执行速度

需求说明:
传入由字母或表情符号组成的字符列表(例:a=['a','b','f','a','g', '😊']),统计每个字符的出现次数,返回出现次数最多且字母序最靠前的字符(若多个字符频次相同,如'a'和'b',则返回'a')。

原实现代码:

def occorrenze(a):
    dix={} #dictionary
    for i in a:
        if i in dix:
            dix[i]+=1
        else:
            dix[i]=1
    # 找出字典中的最大频次
    maxvalues=max(dix.values())
    # 筛选出所有频次等于最大值的字符
    maxkeys= [k for k,v in dix.items() if v == maxvalues]
    # 返回字母序最靠前的字符
    return sorted(maxkeys)[0]

优化方向及实现

原代码的核心逻辑可以通过Python内置工具简化,同时大幅提升执行效率:

  1. 用collections.Counter替代手动统计频次
    Counter是Python标准库中专门用于频次统计的工具,底层由C实现,比手动循环字典的效率高很多,处理大规模列表时优势尤其明显。

  2. 用max()函数的key参数一步得到结果
    无需先找最大频次、再筛选字符、最后排序,直接通过自定义排序规则,让max()函数一次返回符合要求的字符:

    • 排序规则设为lambda x: (-x[1], x[0]):先按频次降序(负号实现降序),频次相同时按字符升序,完全匹配需求。

优化后的代码:

from collections import Counter

def occorrenze(a):
    counts = Counter(a)
    # 直接按规则取最大值对应的字符
    return max(counts.items(), key=lambda x: (-x[1], x[0]))[0]

效率对比

  • 原代码需要三次遍历:一次统计频次,一次找最大频次,一次筛选并排序;
  • 优化后仅需两次遍历:Counter统计一次,max()遍历一次,且Counter的遍历效率远高于手动循环。

内容的提问来源于stack exchange,提问作者Francesco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:01:12