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

Python用lambda作为sort的key按频率排序:数字与字符列表排序差异问题

问题原因

你当前的排序key仅指定了字符出现频率,而输入字符串里a和s的出现次数完全一致(均为3次)。Python内置的sort()是稳定排序:当两个元素的排序key相等时,会保留它们在原列表中的相对位置。
你输入的原始字符串为asdfasdfasdddffffff,转换为列表后a和s本身就是交替出现的,排序时因为二者的key(频率)相同,就会维持原有的交替顺序,所以输出里a和s是交错排列的。
之前的数字例子没有出现这个问题,是因为同频率的数字在原列表里本身就是连续排列的,所以排序后依然保持连续。

解决方案

修改sort的key为元组,在频率之后新增第二个排序规则:按字符本身排序,这样相同字符的排序key完全一致,就会自动聚合到一起:

def char_sort_by_freq(string_to_be_list):
    list_of_chars = list(string_to_be_list)
    char_count = {}
    for char in list_of_chars:
        char_count[char] = char_count.get(char, 0) + 1
    # 排序key先按频率,再按字符本身,同频率的同字符就会排在一起
    list_of_chars.sort(key = lambda x:(char_count[x], x))
    return "".join(list_of_chars)

print(char_sort_by_freq("asdfasdfasdddffffff"))

运行后就能得到你预期的aaasssdddddffffffff输出。如果希望同频率下按字符降序排列,把第二个排序项改成-ord(x)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:45:04