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

Python中按元素频率升序排序列表失效,求解决方法

问题原因及解决方案

原代码问题

你的代码中使用new.sort(key=lambda x: new.count(x))时,由于list.sort()是原地排序,排序过程中列表元素的位置会动态变化,导致new.count(x)每次计算的是当前排序中列表的元素出现次数,而非原始列表的真实频率,最终输出不符合预期。

解决方法

方法1:使用collections.Counter预统计频率

先一次性统计好原始列表中每个元素的出现频率,再用该频率作为排序依据:

from collections import Counter

new = [10, 15, 5, 7, 10, 7, 7]
freq = Counter(new)
new.sort(key=lambda x: freq[x])
print(new)

输出:[15, 5, 10, 10, 7, 7, 7]

方法2:手动统计频率(无需导入模块)

如果不想使用Counter,可以用字典手动统计频率:

new = [10, 15, 5, 7, 10, 7, 7]
freq = {}
for num in new:
    freq[num] = freq.get(num, 0) + 1
new.sort(key=lambda x: freq[x])
print(new)

同样会得到符合期望的输出。

扩展:相同频率元素的额外排序规则

如果需要对相同频率的元素按值排序(比如升序),可以将排序key设为元组,同时指定频率和元素值:

new.sort(key=lambda x: (freq[x], x))

此时输出会变为[5, 15, 10, 10, 7, 7, 7],相同频率的元素按值从小到大排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:33:30