Python自定义排序规则:functools.cmp_to_key()
使用场景
fuctools.cmp_to_key()是用来自定义排序规则,类似于C++中的lambada函数一样,使得sort()函数可以按照自己定义的比较规则进行排序。
使用规则
- 以剑指offer45题为例:
def cmp(a, b):
if a + b > b + a:
return 1
elif a + b < b + a:
return -1
else:
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)) # 不写时,默认是按照从“小”到“大”的顺序排列