Python 3中的二分查找与用户自定义对象列表
在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__
方法。