With c.sort() TypeError: unorderable types: Node() < Node()

With c.sort() TypeError: unorderable types: Node() < Node()

我正在使用 python 3.5,我有一个列表 c.

当我尝试做

c.sort() ## sort the nodes by count, using the __cmp__ function defined in the node class

我收到错误 TypeError: unorderable types: Node() < Node()

你知道怎么解决吗?

在 Python3 中,您必须显式定义 class 的所有比较运算符以使其可排序:==、!=、<、<=、> 和 >=:

class Node:
    # ...

    def __lt__(self, other):
        # ...

    # same for the other operators

显然这是多余的,您可以通过执行以下任一操作来减少 copy/paste。

  1. 将 class 设为 namedtuple,在这种情况下,实例将按字典顺序进行比较。
  2. 定义一个比较运算符并用total_ordering
  3. 修饰class