key lambda的第二个参数在python中的sort函数中意味着什么

时间:2017-09-17 19:45:51

标签: python sorting lambda

要根据每个单词的长度按照后代顺序对d进行排序,我们在python中有这些实现:

d = ["ba","ab","a","b"]

d.sort(key = lambda s: (-len(s), s)) # ['ab', 'ba', 'a', 'b']

d.sort(key = lambda s: -len(s)) # ['ba', 'ab', 'a', 'b']

d.sort(key = lambda s: len(s), reverse = True) # ['ba', 'ab', 'a', 'b']

这是我的问题:

  1. 为什么第一个结果与其他两个结果不同?
  2. 第一个排序的lambda函数中第二个参数s是什么意思?

1 个答案:

答案 0 :(得分:5)

在第一种情况下,排序优先级基于2元组中的元素,元组中的第一个元素具有更高的优先级。

您的玩具代码中的第二个元素与abba的长度绑定为值2的情况相同。对于容器中的任何两个项目,仅在第一个排序标准导致平局时才比较第二个元素。

此外,如果关系存在或未被打破(使用第二个元素或通常与其他两个示例一样),则项目按其原始顺序排列优先顺序; Timsort稳定。

另外值得注意的是,2元组排序对第一个元组项进行数字排序,对第二个元组进行词典排序。

相关问题