返回信息流现在假设有这么一个结构:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
声明一个
heaplist = []
然后调用方法
heapq.heappush(heaplist,(i.val,i))
其中i是ListNode类
为什么在python2.6.5中这个语句并不会报错,而在python3.4.3 中会抛出
TypeError: unorderable types: ListNode() < ListNode()
这个错误呢?
这是一条镜像帖。来源:北邮人论坛 / python / #5576同步于 2015/3/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[提问]关于python中heap的问题
icybee
2015/3/13镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
事实上,这份代码并不是我的,是我在阅读下面这段代码时碰到的,想了一会,还是没想通为什么python3.4.3会不过
http://www.cnblogs.com/zuoyuan/p/3772372.html
【 在 nuanyangyang 的大作中提到: 】
: 你为什么要往heap里放这么奇怪的结构呢?
【 在 icybee 的大作中提到: 】
: 事实上,这份代码并不是我的,是我在阅读下面这段代码时碰到的,想了一会,还是没想通为什么python2.6.5会不过
: http://www.cnblogs.com/zuoyuan/p/3772372.html
这段代码没有往heap里放ListNode啊,heap里的是二元组,二元组是可以比较大小的。
不是啊,我自己的代码里放的也是二元组,还有就是他的代码也会报同样的错啊,这是为什么呢?
【 在 nuanyangyang 的大作中提到: 】
: 这段代码没有往heap里放ListNode啊,heap里的是二元组,二元组是可以比较大小的。
thx,的确是这个问题,但这就更没法理解为什么python2.6.5不抛出错误了
【 在 golifang123 的大作中提到: 】
: 你需要实现__lt__方法
CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.
Python2 官方文档中的,地址:https://docs.python.org/2/library/stdtypes.html#comparisons
在 Python3中做了规定,禁止了这种用法:
Instances of a class cannot be ordered with respect to other instances of the same class, or other types of object, unless the class defines enough of the methods __lt__(), __le__(), __gt__(), and __ge__() (in general, __lt__() and __eq__() are sufficient, if you want the conventional meanings of the comparison operators).
文档地址:https://docs.python.org/3.4/library/stdtypes.html#comparisons
【 在 icybee 的大作中提到: 】
: thx,的确是这个问题,但这就更没法理解为什么python2.6.5不抛出错误了
非常感谢,现在完全明白了,之前也因为这个问题查了手册,可是却没往这个方面想
【 在 golifang123 的大作中提到: 】
: CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.
: Python2 官方文档中的,地址:https://docs.python.org/2/library/stdtypes.html#comparisons
: 在 Python3中做了规定,禁止了这种用法:
: ...................