python - 一分为二并列出用户定义的对象 (python 3)

标签 python python-3.x cmp bisect

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

(integer, user-defined object).

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

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

然后我得到一个错误“builtins.TypeError: unorderable types ...”

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

最佳答案

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

关于python - 一分为二并列出用户定义的对象 (python 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189505/

相关文章:

python - Kivy Python TextInput 显示气泡

python - 为什么在 Python3.0 中将 cmp 参数从 sort/sorted 中删除?

python - 使用 cmp 在 Python 中排序()

python - 如果答案无效则重新启动 if 循环

python - 安装 python-igraph 时出现 UnicodeDecodeError

python - 将模型从一个 Django 应用程序迁移到多个其他应用程序

python - dask:指定进程数

Python 3 包模块与标准模块冲突

python - .__repr__() 帮助 python 3

python - 将排序从 Python2 转换为 Python3