不使用functools.cmp_to_key,重写自定义类的<或者>运算符
1.重写 '<'符号
class node:
def __init__(self,s,a):
self.s=s
self.a=a
def __lt__(self, other):
if self.s==other.s:
return self.a<other.a
else:
return self.s<other.s
if __name__ == '__main__':
x=[node(3,3),node(3,2),node(2,1),node(1,2)]
x.sort()
for t in x:
print("("+str(t.s)+","+str(t.a)+")")
分析:首先以s作为比较的基准,s小排在前面,s大排在后面,如果s相等,以a作为比较的基准,a小排在前面,a大排在后面
结果:
(1,2)
(2,1)
(3,2)
(3,3)
2.重写‘>’符号
class node:
def __init__(self,s,a):
self.s=s
self.a=a
def __gt__(self, other):
if self.s==other.s:
return self.a<other.a
else:
return self.s<other.s
if __name__ == '__main__':
x=[node(3,3),node(3,2),node(2,1),node(1,2)]
x.sort()
for t in x:
print("("+str(t.s)+","+str(t.a)+")")
分析:首先以s作为比较的基准,s大排在前面,s小排在后面,如果s相等,以a作为比较的基准,a大排在前面,a小排在后面
结果:
(3,3)
(3,2)
(2,1)
(1,2)