排序对象python列表

时间:2014-08-07 17:41:01

标签: python sorting

我写了一个类,它存储了我也定义过的对象列表。

我希望能够致电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()如果已经排序则不执行任何操作。

1 个答案:

答案 0 :(得分:3)

__lt__应该返回一个真值,如果&仅当self小于other时,如果cmp(self, other)不等于selfother将返回真值(1或-1)。你需要改变这个:

def __lt__(self, other):
    return cmp(self.number, other.number)

到此:

def __lt__(self, other):
    return cmp(self.number, other.number) < 0