1

在 python 3 之前,我使用 bisect 将用户定义的对象插入到列表中。bisect 对此很满意,因为我的用户定义对象有一个__cmp__定义如何比较对象的定义。我已经阅读了在 python 3 中不支持 cmp 的理由,我对此很好。我认为对我的旧代码的修复是通过将它变成一个元组来“装饰”我的用户定义对象

(integer, user-defined object).

但是,如果我有我的元组列表,然后尝试...

i = bisect_left([list_of_tuples], (integer, user-defined object))

然后我得到一个错误“builtins.TypeError:不可排序的类型......”

那么,(在 python 3 中)我如何将 bisect 用于不完全由具有自然排序顺序的事物组成的项目列表?

4

1 回答 1

16

您需要添加一个__lt__方法;这是现在用于比较而不是__cmp__

于 2010-11-15T22:37:01.003 回答