1.为什么发现functools.cmp_to_key()
2.functools.cmp_to_key()是什么
- 简单来说,它的功能就是定义排序时的规则,使数组按照自己定义的规则进行排序。
3.functools.cmp_to_key()怎么用
- 举例来说:一个数组[1,0,-10,200,3,7],正常按照从小到大进行排序,结果为:[-10, 0, 1, 3, 7, 200]。
- 如果我们想按照数组中元素的绝对值进行排序,那我们就可以采用如下的代码:
import functools
def mycmp(x,y):
if abs(x) > abs(y):
return 1
elif abs(x) < abs(y):
return -1
else:
return 0
if __name__ == '__main__':
arr = [1,0,-10,200,3,7]
arr.sort(key=functools.cmp_to_key(mycmp))
print(arr)
# 打印结果:[0, 1, 3, 7, -10, 200]
- 上述代码中我们定义排序规则mycmp:对于两个数字x和y,我们定义绝对值大的为“大”,绝对值小的为“小”。之后我们通过key参数告诉数组的内置函数sort,让它明白如何对两个数进行比较,清楚哪个是“大”的,哪个是“小”的。比如对于0和-10,|0|<|-10|,因此对于规则mycmp,0<-10。(注:定义排序规则只是为了明白如何得到两个数之间较“大”的一个,与数组是从“小”到“大”还是从“大”到“小”排序,是没有关系的,这个是由排序的另一个参数:reverse = True/False来确定,我们定义排序规则,只是需要弄清楚谁是“大”的)
- 再举一个例子,我们想按照数组中元素的相反数进行排序(规则需要这样写:对于x,y,若x的相反数大于y的相反数,返回1)
import functools
def mycmp(x,y):
if -x > -y:
return 1
elif -x < -y:
return -1
else:
return 0
if __name__ == '__main__':
arr = [1,0,-10,200,3,7]
arr.sort(key=functools.cmp_to_key(mycmp))
print(arr)
# 打印结果:[200, 7, 3, 1, 0, -10]
网友评论