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

为什么sort(key=lambda x: x[0])按列表内每个元素的首值排序?

请问在上述解决方案中,intervals.sort(key=lambda x: x[0])为什么会按列表中每个元素的起始值排序?x[0]难道不是指代整个列表的第一个元素吗?

原理说明

核心是对sort的key参数和lambda形参的作用范围存在误解,具体逻辑如下:

  • Python列表的sort()方法中,key参数要求传入一个仅接收单个参数的函数,这个函数会被自动依次作用到列表的每一个独立元素上,排序时会以这个函数的返回值作为比较依据,而非元素本身。
  • 这里传入的lambda x: x[0]就是符合要求的单参数函数,其中的x是lambda的局部形参,指代的是intervals列表中的每一个子元素(也就是每个类似[1,4]的时间区间子列表),和外层的intervals大列表没有直接关系。形参名可以随意替换,下面的写法和原代码效果完全等价,可读性更高:
    intervals.sort(key=lambda interval: interval[0])
    
  • 举实际运行示例说明,当intervals = [[6, 7], [2, 4], [8, 12]]时,排序过程会自动遍历每个子元素计算key值:
    1. 子元素[6,7]传入lambda形参,返回key值6
    2. 子元素[2,4]传入lambda形参,返回key值2
    3. 子元素[8,12]传入lambda形参,返回key值8
      排序时按照key值从小到大重排子元素,最终得到[[2,4], [6,7], [8,12]],也就是按每个区间的起始值排序的效果。
  • 如果你要取整个intervals大列表的第一个元素,写法是intervals[0],和这里的lambda形参x完全是两个不同的指代对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:24:03