为何Python sort()函数key参数的lambda未改变列表元素值?
为什么sort()的key参数里的lambda不会修改列表元素?
这本质是没搞懂sort()方法中key参数的作用——它只负责为每个元素生成一个「排序参考值」,排序逻辑会基于这个参考值调整元素顺序,但绝对不会修改原列表里的元素本身。
拿你的代码来说:
nas = [1,2,3,4,5] nas.sort(key=lambda a: a + 1)
这里的lambda a: a + 1只是给每个元素算出一个加1后的数值(1→2、2→3……5→6),sort()会用这些数值来判断元素的先后顺序。但因为这些参考值的顺序和原元素的顺序完全一致,所以排序后的列表看起来和原来没区别;更重要的是,这个lambda的计算结果只是用来排序的“标尺”,根本不会替换原列表里的元素。
如果你的需求是修改列表元素(比如给每个元素加1),那得先手动修改元素,再排序(或者直接生成新列表):
nas = [1,2,3,4,5] # 先修改所有元素 nas = [x + 1 for x in nas] nas.sort() print(nas) # 输出 [2,3,4,5,6]
再举个更直观的例子,用key改变排序顺序但不修改元素:
nas = [1,2,3,4,5] # 用元素的负数作为排序参考,实现倒序 nas.sort(key=lambda a: -a) print(nas) # 输出 [5,4,3,2,1]
这里原元素还是1、2、3、4、5,只是顺序被调整了,因为排序时参考的是每个元素的负数,而不是修改元素本身。
核心要点:
sort()的key参数仅用于排序时的比较依据,不会改动原列表的元素- 若要修改元素,必须手动对列表元素做转换操作,再进行排序(或生成新列表)
内容的提问来源于stack exchange,提问作者Duran Das
相关产品推荐
相关产品推荐

