bisect和用户定义对象列表(python 3)

Mik*_*ike 1 python cmp bisect python-3.x

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

(integer, user-defined object).
Run Code Online (Sandbox Code Playgroud)

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

i = bisect_left([list_of_tuples], (integer, user-defined object))
Run Code Online (Sandbox Code Playgroud)

然后我收到错误"builtins.TypeError:unorderable types ..."

那么,(在python 3中)我如何使用bisect作为完全不具有自然排序顺序的项目列表?

nov*_*lis 13

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

  • PS我认为你可以将此标记为问题的答案,这些问题可以让我获得声誉,并且显然会让人们更有可能回答你未来的问题. (5认同)