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

请解释这段Python频率排序代码中sorted函数的逻辑,尤其是`-item[0]`的作用

列表元素按频率排序代码中sorted函数的工作逻辑解析

代码功能回顾

这段Python代码的核心是将输入列表按元素出现频率排序,最终返回一个新列表:先统计每个元素的出现次数,再基于频率排序元素,最后按重复次数生成结果列表。

完整代码

# code to print elements in a list on the basis of frequency they occurr
class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        hashMap = {}
        res = []
        # getting the frequency
        for i in nums:
            if i in hashMap:
                hashMap[i] = hashMap.get(i) + 1
            else:
                hashMap[i] = 1
        # sorting on the basis of value in dictionary
        hashMap = sorted(hashMap.items(), key=lambda item: (item[1], -item[0]))

        for k,v in hashMap:
            res.extend([k]*v)
        
        return res

sorted函数的工作逻辑

sorted(hashMap.items(), key=lambda item: (item[1], -item[0]))是排序的核心,拆解来看:

  1. 排序对象:hashMap.items()返回字典的键值对元组集合,每个元组格式为(元素值, 出现频率),比如输入[1,2,2,3,3,3]会生成[(1,1), (2,2), (3,3)]。
  2. 排序规则:key参数指定排序依据是二元组(item[1], -item[0]),sorted会按元组的优先级依次比较:
    • 第一优先级:item[1](元素的出现频率),默认按升序排列,即出现次数少的元素排在前面,次数多的排在后面。
    • 第二优先级:-item[0](元素值的负数),当多个元素的出现频率相同时,触发这一级比较:
      因为sorted是升序排序,数值更大的元素,它的负数值更小(比如元素5的负数是-5,元素3的负数是-3,-5 < -3),会被优先排列。最终效果是:频率相同的元素,数值大的排在更前面。

举个例子:如果输入是[3,1,2,2,3,3,1],统计后哈希表是{3:3, 1:2, 2:2},排序时:

  • 先按频率升序,1和2频率都是2,排在3(频率3)前面;
  • 再比较-item[0]:-2 < -1,所以2会排在1前面;
  • 最终排序后的元组列表是[(2,2), (1,2), (3,3)],生成的结果列表就是[2,2,1,1,3,3,3]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:01:08