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

Python列表排序中key参数使用count方法的差异疑问

为什么两段列表排序代码结果不同?

核心原因在于**sort的key函数是否依赖于正在被修改的原列表**:

代码1的工作逻辑

a = [1,3,4,5,1,7,9,9,9,9,9,1,3,2]
b = a.copy()
a.sort(key=b.count, reverse=True)

这里b是原列表a的完整拷贝,b的内容在排序过程中完全不变。

  • sort会为a中的每个元素x,调用b.count(x)计算其在原列表中的出现次数(这个次数是固定的)。
  • 按照次数从高到低排序:9出现5次→1出现3次→3出现2次→其余元素各1次,最终得到预期的排序结果。

代码2的问题所在

a = [1,3,4,5,1,7,9,9,9,9,9,1,3,2]
a.sort(key=a.count, reverse=True)

这里key函数是a.count,而a是正在被原地排序的列表。

  • Python的list.sort()是原地排序算法,排序过程中会不断调整a内元素的顺序。虽然元素的总出现次数没有变化,但a.count(x)是实时遍历当前a列表统计次数。
  • 关键问题:sort算法执行时会多次调用key函数(而非预先计算所有元素的key值)。当列表元素顺序被修改后,后续调用a.count(x)时遍历的是已经部分排序的列表,这种“一边修改列表一边基于修改后的列表计算排序依据”的依赖会打乱算法的内部逻辑,最终导致排序失败,列表保持原顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:12:03