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

为什么相同key函数下Python的list.sort与sorted排序结果不同

问题核心原因说明

两个API的行为差异是导致结果不同的根本原因

  • sorted为非原地排序函数,执行时会生成一个新的列表作为返回结果,整个排序过程不会修改传入的原始列表。你在key函数中调用numbers.count(x)时,每次统计的都是原始列表的元素出现频率,数值准确,因此排序结果符合预期。
  • list.sort为原地排序方法,执行时会直接修改当前列表的元素顺序。你的key函数直接依赖正在被排序的numbers列表的count结果,排序执行过程中列表元素位置已经被打乱,此时统计得到的频率不是原始列表的真实频率,因此最终排序结果错误。

推荐的兼容写法

不要在key函数中依赖正在被排序的列表的动态状态,提前统计所有元素的出现频率,再进行排序,此时使用list.sort和sorted的结果完全一致:

from collections import Counter

lista = [3, 4, 11, 13, 11, 4, 4, 7, 3]
def func(numbers: list):
    # 提前统计频率,避免后续依赖变化的列表状态
    freq_counter = Counter(numbers)
    numbers.sort(key=lambda x: (-freq_counter[x], x))
    return numbers
    
result = func(lista)
print(result)
# 输出:[4, 4, 4, 3, 3, 11, 11, 7, 13]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:15:04