美文网首页
Python自定义排序规则:functools.cmp_to_k

Python自定义排序规则:functools.cmp_to_k

作者: 不懂球的2大业 | 来源:发表于2021-12-28 00:04 被阅读0次

    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]
    

    相关文章

      网友评论

          本文标题:Python自定义排序规则:functools.cmp_to_k

          本文链接:https://www.haomeiwen.com/subject/kfpuqrtx.html