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

关于Python sorted()排序特殊语法的咨询及实现疑问

HackerRank字符频率排序问题解析

问题说明

我在做一道HackerRank题目,要求从字符串里找出出现次数排名前三的字符,排序规则是:

  • 出现次数多的排在前面
  • 若次数相同,按字母顺序升序排列

给定输入字符串'aabbbccde',预期输出为:

b 3
a 2
c 2

两种排序代码对比

正确代码(通过所有测试用例)

这段代码能通过包括隐藏用例在内的所有测试,但我一开始没弄明白它的逻辑:

logo = sorted(all_freq.items(), key=lambda x: (-x[1], x[0]))

我的代码(仅通过部分测试用例)

我自己写的代码只通过了部分测试(包括示例),但无法覆盖所有场景:

logo = sorted(all_freq.items(), key=lambda x:x[1], reverse=True)

语法逻辑拆解

正确代码的原理

sorted()函数默认是升序排序,这里的lambda返回了一个元组,利用元组的排序特性(依次比较每个元素)实现了题目要求的双重排序规则:

  1. -x[1]:x[1]是字符的出现次数,对次数取负数后,原本次数多的数值会变成更小的负数。因为sorted()默认升序,更小的负数会排在前面,相当于实现了次数降序的效果。
  2. x[0]:当两个字符的次数相同时(也就是-x[1]的值相等),会比较元组的第二个元素——字符本身。字符串默认按字母序升序比较,这样就满足了次数相同时字母升序排列的要求。

我的代码的问题

我的写法只指定了按次数降序(reverse=True),但当次数相同时,sorted()会按照all_freq.items()的原始顺序(字典的插入顺序)来排序,而不是按字母顺序,这就导致部分测试用例不通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:49