Python 3中的二分查找与用户自定义对象列表

2 投票
1 回答
1897 浏览
提问于 2025-04-16 07:07

在Python 3之前,我用一个叫做bisect的工具把自己定义的对象插入到列表里。bisect很喜欢这样,因为我定义的对象里面有一个叫做__cmp__的方法,它告诉程序怎么比较这些对象。我了解Python 3不再支持这个方法的原因,我对此也没问题。我想了个办法,就是把我的自定义对象“装饰”一下,变成一个元组。

(integer, user-defined object).

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

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

结果我遇到了一个错误:“builtins.TypeError: unorderable types ...”

所以,在Python 3中,我该如何使用bisect来处理那些不是完全由自然排序的东西组成的列表呢?

1 个回答

18

你需要添加一个 __lt__ 方法;现在这个方法用来进行比较,而不是以前的 __cmp__ 方法。

撰写回答