推入堆时出现不可排序的类型错误
Unorderable type error while pushing into heap
我有 N 个链表的头部列表,我正尝试使用堆根据它们的值进行合并。
由于 heapq
使用元组中的第一个值在堆中进行排序,因此我编写了以下代码:
def mergeKLists(self, A): # A contains list of Linked list heads
nodeList = []
for i in A:
nodeList.append((i.val,i)) # Creating a list of tuples : (value, Node address)
heapq.heapify(nodeList)
print(nodeList)
这很好用并创建了一个按元组中的第一个值排序的堆。但是,当我试图在此堆上推送更多元素时,它会给我一个无序类型错误:
t = heapq.heappop(nodeList)
node = t[1]
heapq.heappush(nodeList,(node.next.val,node.next)) # this throws error for node.next parameter
我得到的错误:
heapq.heappush(nodeList,(node.next.val,node))
TypeError: unorderable types: ListNode() < ListNode()
我哪里做错了?
当输入列表有重复值时会出现此错误。在这种情况下,比较具有相同第一个元组成员的两个元组,将导致比较 第二个 元组成员,这是一个未定义的操作。
要避免此错误,请创建 ListNode
个实例 comparable,或者在您的元组中间添加一个唯一的成员:
nodeList.append((i.val, id(i), i))
...并相应地调整其余代码。
我有 N 个链表的头部列表,我正尝试使用堆根据它们的值进行合并。
由于 heapq
使用元组中的第一个值在堆中进行排序,因此我编写了以下代码:
def mergeKLists(self, A): # A contains list of Linked list heads
nodeList = []
for i in A:
nodeList.append((i.val,i)) # Creating a list of tuples : (value, Node address)
heapq.heapify(nodeList)
print(nodeList)
这很好用并创建了一个按元组中的第一个值排序的堆。但是,当我试图在此堆上推送更多元素时,它会给我一个无序类型错误:
t = heapq.heappop(nodeList)
node = t[1]
heapq.heappush(nodeList,(node.next.val,node.next)) # this throws error for node.next parameter
我得到的错误:
heapq.heappush(nodeList,(node.next.val,node))
TypeError: unorderable types: ListNode() < ListNode()
我哪里做错了?
当输入列表有重复值时会出现此错误。在这种情况下,比较具有相同第一个元组成员的两个元组,将导致比较 第二个 元组成员,这是一个未定义的操作。
要避免此错误,请创建 ListNode
个实例 comparable,或者在您的元组中间添加一个唯一的成员:
nodeList.append((i.val, id(i), i))
...并相应地调整其余代码。