Python自定义排序规则:functools.cmp_to_key()
使用场景
fuctools.cmp_to_key()是用来自定义排序规则,类似于C++中的lambada函数一样,使得sort()函数可以按照自己定义的比较规则进行排序。
使用规则
以剑指offer45题为例:def cmp(a, b):if a + b > b + a:return 1elif a + b < b + a:return -1else:return 0
当使用nums.sort(key = functools.cmp_to_key(cmp))
调用时,将nums按照从小到大的顺序排列。
由以上例子可知,cmp中定义的规则就相当于是通过key参数告诉函数sort()如何对两个数进行比较,让它清楚什么样的条件是“大”,什么样的条件是“小”。
注意:定义这个排序规则只是为了让sort()明白如何得到两个数中较“大”的那个,与数组最后是“从小到大”排序还是“从大到小”排序没有关系。sort()如何排序是由第二个参数reverse来确定的。
nums.sort(key = functools.cmp_to_key(cmp), reverse = True) # 数组nums按照从“大”到“小”的顺序排列nums.sort(key = functools.cmp_to_key(cmp), reverse = False) # 数组nums按照从“小”到“大”的顺序排列nums.sort(key = functools.cmp_to_key(cmp)) # 不写时,默认是按照从“小”到“大”的顺序排列