按频率降序、同频元素值降序排序列表的实现问题
解决频率排序+同频率元素降序的问题
嘿,我一眼就发现问题所在啦!你现在的排序逻辑里,当元素频率相同时是按元素值升序排列的,但你想要的是降序,只需要调整排序的第二个key参数就行。
问题分析
你的代码里这一行是关键:
x = sorted(c.most_common(), key=lambda x: (-x[1], x[0]))
这里的key=lambda x: (-x[1], x[0])表示:
- 优先按
-x[1](也就是频率降序)排序 - 当频率相同时,按
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
相关产品推荐
相关产品推荐

