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

Python中按计数降序、字母升序排序的问题排查与优化

问题排查与高效实现方案

一、现有代码的问题分析

1. 字符统计逻辑错误

你用的正则r'([\w])(\1*)'只能匹配连续重复的字符,没法统计非连续出现的字符次数。比如字符串是abac时,a实际出现2次,但正则会拆成两个单独的a,统计结果直接出错。

2. 排序逻辑错误

最后一步的两次排序完全搞反了优先级:

sorted( (sorted(var,key=lambda x:x[1],reverse=True)) , key=lambda x:x[0])

先按次数降序后,又整体按字符升序排序,导致次数最高的b(3)被排到了a(2)后面,完全违背了“先按计数值降序,计数值相同再按字符升序”的要求。正确做法是用一个排序key同时包含两个条件:以负的计数值实现降序,以字符本身实现升序,一次排序就能搞定。

3. 冗余的字符提取代码

list(map(str,set(i.__getitem__(0))))[0]写法冗余且没必要,捕获组i.group(1)直接就能拿到匹配的单个字符,不需要转成集合再取元素。

二、高效实现方案

Python内置的collections.Counter是专门用来统计可哈希对象出现次数的工具,简洁高效,配合一次排序就能满足需求:

from collections import Counter

s = 'aabbbccde'
# 统计每个字符的出现次数
char_counts = Counter(s).items()
# 排序:先按次数降序,次数相同则按字符升序
sorted_counts = sorted(char_counts, key=lambda x: (-x[1], x[0]))
# 输出前3个结果
for char, count in sorted_counts[:3]:
    print(char, count)

代码说明:

  • Counter(s)直接统计字符串中每个字符的出现次数,返回类似字典的对象,items()方法得到(字符, 次数)的元组列表。
  • 排序keylambda x: (-x[1], x[0]):-x[1]让次数高的排在前面(降序),x[0]让次数相同时字符按字母升序排列。
  • 最后切片[:3]取前3个结果输出,完全符合你的需求。

运行这段代码会输出:

b 3
a 2
c 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:35:08