比较列表的功能:没有__cmp__

时间:2013-06-09 09:43:43

标签: python operator-overloading

我有一个我要排序的对象列表。每个对象都有一个id,它是一个字符串列表。

所以我定义了:

class MyObject(object):
    ...
    def __cmp__(self, other):
        return self.id.__cmp__(other.id)

到哪个python(2.7)说

object 'list' has no attribute '__cmp__'

所以我定义了六个'丰富的比较'......但是有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

如果你唯一需要订购的是排序你的对象,那么在调用key时使用sorted参数可能会更好。

sorted(list_of_objects, key=lambda x: x.id)

丰富的比较比__cmp__更受欢迎,这就是list没有__cmp__的原因。

在您的特定情况下,您可以使用cmp功能代替您执行所有比较:

return cmp(self.id, other.id)

顺便说一下,没有必要定义所有六个运算符。

  

如果操作员左侧的物体没有定义       适当的丰富比较运算符(在C级或       使用其中一种特殊方法),然后比较相反,       和相反的操作员调用右手操作符,       并且交换了两个对象。这假定a&lt; b和b>一个       与a <= bb >= a相同,==!=是等效的       可交换的(例如a == b当且仅当b == a)。