python实现Java中的比较器

from functools import cmp_to_key
def reverse_numeric(x, y):
    return x - y
sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric))

以上为官方示例 官方文档示例

个人实现的示例

def test(x, y):
    if x + y > y + x:
        return -1
    elif x + y < y + x:
        return 1
    else:
        return 0
sorted(["b", "ba"], key=cmp_to_key(test))
# res = ["ba", "b"]

对象之间的比较

class Student:
    def __init__(self, name, id, age):
        self.name = name
        self.id = id
        self.age = age
    def __repr__(self):
        return "name:{}, id:{}, age:{}".format(self.name,self.id,self.age)

s1 = Student("ajin",1,20)
s2 = Student("xialin",3,21)
s3 = Student("xiaoxiao",2,24)
s4 = Student("feng",4,23)


def sortBykey(item):
    return item.age

l = [s1,s2,s3,s4]
print(list(l))
l2 = sorted(l, key=sortBykey)
l3 = sorted(l, key=lambda x: x.id)
print(l2)
print(l3)

注意点

  1. operator 模块有 itemgetter() 、 attrgetter() 和 methodcaller() 函数。使用这些可以少些函数

  2. python中的排序是默认稳定的


文章作者: ajin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ajin !
 上一篇
装饰器学习 装饰器学习
写在开头, 昨天参加了一场面试, 可能是疏于使用, 面试官的一道装饰器题目没有写出来, 因此这次我们来翻译一篇python装饰器的文章并结合具体题目来学习装饰器, 原文链接 stackouverflow 题目 装饰器基础### pytho
2020-03-20
下一篇 
hadoop小结 hadoop小结
概述 namenode:存储文件元数据,文件名,文件目录结构,文件属性(生成时间,副本数,文件权限等)以及每个文件的块列表和块所在的datanode等 datanode:在本地文件系统存储文件块数据,以及块数据的校验和 secondary
2020-01-22
  目录