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

为何调换Python列表sort方法调用顺序可满足排序要求?

两次sort调用顺序影响结果的原因

问题背景

需要实现sort_index函数,满足:

  • 接收嵌套列表作为输入
  • 按内部列表的第三个元素降序排列外层列表
  • 排序出现平局时按内部列表第一个元素升序排列
  • 原地修改输入列表

初始错误代码:

def sort_index(some_list):
    some_list.sort(key=lambda x: x[2], reverse=True)
    some_list.sort(key=lambda x: x[0])

修改后正确代码:

def sort_index(some_list):
    some_list.sort(key=lambda x: x[0])
    some_list.sort(key=lambda x: x[2], reverse=True)

原因解析

核心在于Python的list.sort()是稳定排序:当两个元素的排序key值相同时,它们的相对位置会保留上一次排序后的结果。

你的需求优先级是:

  1. 主要条件:按内部列表第三个元素(x[2])降序
  2. 次要条件:当x[2]相同时,按内部列表第一个元素(x[0])升序

所以正确的逻辑是先处理次要条件,再处理主要条件:

  • 第一步按x[0]升序排序:此时所有元素已按第一个元素排好序,x[0]相同的元素会保持相邻且有序。
  • 第二步按x[2]降序排序:当两个元素的x[2]值相同时,稳定排序会保留它们之前按x[0]排好的相对位置,刚好满足“平局时按x[0]升序”的要求。

而你最初的顺序是先排主要条件再排次要条件:

  • 第一步按x[2]降序排好后,第二步按x[0]升序排序会直接覆盖之前的排序结果——不管x[2]的值,完全按x[0]重新排序,这就破坏了原本按x[2]降序的核心要求,自然通不过测试。

更简洁的写法

其实可以用复合key一次完成排序,效率更高:

def sort_index(some_list):
    some_list.sort(key=lambda x: (-x[2], x[0]))

这里用-x[2]把降序需求转化为默认的升序排序(原数降序等价于负数升序),然后用x[0]作为次要排序条件,一次调用sort就能满足所有要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:45:32