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

按频率降序、同频元素值降序排序列表的实现问题

解决频率排序+同频率元素降序的问题

嘿,我一眼就发现问题所在啦!你现在的排序逻辑里,当元素频率相同时是按元素值升序排列的,但你想要的是降序,只需要调整排序的第二个key参数就行。

问题分析

你的代码里这一行是关键:

x = sorted(c.most_common(), key=lambda x: (-x[1], x[0]))

这里的key=lambda x: (-x[1], x[0])表示:

  1. 优先按-x[1](也就是频率降序)排序
  2. 当频率相同时,按x[0](元素值升序)排序

这就是为什么频率相同的2和3会出现2,2,2在3,3,3前面的原因——因为2比3小,升序排列自然靠前。

修复方案

把第二个排序条件改成-x[0],这样频率相同时,元素值越大的越靠前:

from collections import Counter
my_list = [1, 2, 3, 1, 1, 2, 3, 1, 2, 3]  # 小提醒:别用list当变量名,会覆盖内置类型
c = Counter(my_list)
# 修改排序key的第二个参数为 -x[0],实现同频率元素值降序
x = sorted(c.most_common(), key=lambda x: (-x[1], -x[0]))
y = [([v] * n) for (v, n) in x]
z = sum(y, [])
print(z)

运行结果

执行后会输出你期望的结果:

[1, 1, 1, 1, 3, 3, 3, 2, 2, 2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:28:14