0

並べ替えたいオブジェクトのリストがあります。各オブジェクトには、文字列のリストである ID があります。

だから私は定義しました:

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

Python(2.7)が言った

object 'list' has no attribute '__cmp__'

だから私は6つの「豊富な比較」を定義しました...しかし、それを行うためのより良い方法はありますか?

4

1 に答える 1

3

順序付けが必要なのはオブジェクトのソートkeyのみである場合は、を呼び出すときに引数を使用する方がよい場合がありますsorted

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

豊富な比較が好まれるため__cmp__lists には__cmp__.

特定のケースcmpでは、代わりにすべての比較を実行する関数を使用できます。

return cmp(self.id, other.id)

ちなみに、6 つの演算子すべてを定義する必要はありません。

演算子の左側のオブジェクトが適切な豊富な比較演算子を (C レベルまたは特別なメソッドのいずれかで) 定義していない場合、比較は逆になり、右側の演算子が反対の演算子で呼び出されます。となり、2 つのオブジェクトが入れ替わります。これは、 a < b と b > a が同等であると仮定a <= bb >= a==います。!=a == bb == a

于 2013-06-09T09:46:52.520 に答える