需要重新定义哪些Python对象比较方法才能使sorted()起作用?

DYZ*_*DYZ 5 sorting redefinition python-3.x

我觉得这个问题以前肯定有人问过,但我找不到答案。

假设我想实现一个 Python 类,其对象可以使用sorted(). 我是否必须重新实现所有方法,例如__lt__()__gt__()等?最低限度是多少?换句话说,哪种方法需要sorted()排序?

Mar*_*nen 4

根据文档

sort ( *, key=None, reverse=False )
此方法仅使用项目之间的 < 比较对列表进行就地排序。异常不会被抑制 - 如果任何比较操作失败,整个排序操作将失败(并且列表可能会处于部分修改的状态)。

所以你只需要def __lt__(self,other):为你的班级定义。

另请参阅底部附近的排序方法:

__lt__()在两个对象之间进行比较时保证使用排序例程。因此,通过定义一个方法可以很容易地向类添加标准排序顺序__lt__()

  • @DYZ Python排序例程都使用`__lt__()`。请参阅编辑以供参考。 (2认同)