我写了一个类,它存储了我也定义过的对象列表。
我希望能够致电obj_list.sort()
,并将结果按升序排序,但它并没有按照我想要的方式计算出来。
如果我收到obj
数据并致电sort()
三次,这就是我当前实施的行为:
class MyClass():
def __init__(self):
self.obj_list = self.set_obj_list()
def set_obj_list(self):
data = []
for x in range(20):
obj = MyObjClass(x)
data.append( obj )
data.sort()
return data
class MyObjClass():
def __init__(self, number):
self.number = number # number is an integer
def __lt__(self, other):
return cmp(self.number, other.number)
def __repr__(self):
return str(self.number)
a = MyClass()
print a.obj_list
a.obj_list.sort()
print a.obj_list
a.obj_list.sort()
print a.obj_list
a.obj_list.sort()
print a.obj_list
谢谢。
我希望它按升序排序,但sort()
如果已经排序则不执行任何操作。
答案 0 :(得分:3)
__lt__
应该返回一个真值,如果&仅当self
小于other
时,如果cmp(self, other)
不等于self
,other
将返回真值(1或-1)。你需要改变这个:
def __lt__(self, other):
return cmp(self.number, other.number)
到此:
def __lt__(self, other):
return cmp(self.number, other.number) < 0