许多语言(例如C++/Java)的sort函数/方法都支持自定义比较类/函数,Python2的list
的sort
方法也支持可选参数cmp
,支持用户自定义比较函数,但是Python3中删除了可选参数cmp
,同时也删除了内置函数cmp
,只提供了可选参数key
用于自定义排序。但是,有些排序需求用cmp
实现较为简单直接,不容易改写成key
实现,为此,Python3的functools
包提供了cmp_to_key
函数,可以将用户自定义的cmp函数转化为可以被可选参数key
接收的对象。
例如,在Python2中,以下实现
nums = [3, 30, 34, 5, 9]
nums.sort(cmp=lambda x,y: cmp(str(x) + str(y), str(y) + str(x)))
在Python3中,可以借用cmp_to_key
转化为key
参数的实现
from functools import cmp_to_key
nums = [3, 30, 34, 5, 9]
nums.sort(key