Python 排序机制

cmp

Python 2.x 的版本中,所有的排序函数( sorted() )都支持 cmp 参数来支持用户自定义的排序方法。 cmp 参数是一个输入为两个值的函数,输出为二者的比较关系,这也是目前绝大多数语言中的实现。 但是在 Python 3.0 之后,彻底的移除了这个参数(作为简化和统一语言更大努力的一部分, 消除丰富比较(rich comparison)和 __cmp__() 之间的冲突)。

如果想要继续使用这个方法,可以在你定义的 cmp 方法外包上 functools.cmp_to_key() 方法, 然后作为 sorted()key 参数传进去。

但这种方法并不建议,只是为了让来不及做出改变的人继续适应的妥协方法。

key

key 参数是一个输入为一个值的函数,输出为用来比较的值。其输出的值自身是 可比较 的。 这种方法之所以要快捷,是因为在比较过程中, key 函数只需要被调用一次。

它还可以和 operator 中的方法结合起来,让代码看起来更加简洁,执行起来更高效。

Ref