Python functools模块之cmp_to_key
cmp_to_key()
是将比较函数
(comparison function)转化为关键字函数
(key function)。与使用接受·关键字函数·的方法一同使用(如 sorted(), min(), max(), heapq.nlargest(), itertools.groupby() 等)。该函数主要用来将程序转成 Python 3 格式的,因为 Python 3 中不支持比较函数cmp()
。
- 比较函数是可调用的,接受两个参数,比较这两个参数,例如:x,y 当x>y时返回
1
;等于时返回0
;否则返回-1
。关键字函数也是可调用的,接受一个参数,同时返回一个可以用作排序关键字的值。 - 采用
cmp_to_key()
函数,可以接受两个参数,将两个参数做处理,例如:作和 作差等,转换成一个参数,即可应用于关键字函数
。
举例
from functools import cmp_to_key
nums = [3, 30, 34, 5, 9]
new_nums = sorted(nums, key=cmp_to_key(lambda x, y: y - x))
new_nums2 = sorted(nums, key=cmp_to_key(lambda x, y: x - y))
print(new_nums)
print(new_nums2)
from functools import cmp_to_key
nums = [3, 30, 34, 5, 9]
nums2 = map(str, nums)
new_nums2 = sorted(nums2, key=cmp_to_key(lambda x, y: int(x + y) - int(y + x)))
print(new_nums2)
from functools import cmp_to_key
nums = [3, 30, 34, 5, 9]
nums2 = map(str, nums)
new_nums3 = sorted(nums2, key=cmp_to_key(lambda x, y: int(x + y) - int(y + x)), reverse=True)
print(new_nums3)