如果我将列表元素推入堆中,将使用什么堆排序 属性?

What heap ordering property will be used, if I push list elements inside a heap?

假设我创建一个堆并将一些列表元素压入堆中,如下所示:

from heapq import heapify,heappop,heappush
pq = []
heapify(pq)
heappush(pq,[4,0,1])
heappush(pq,[7,1,3])
heappush(pq,[2,4,2])

如何将heappop()运算return值? 在我的例子中,我希望列表的第一个元素用于最小堆排序 属性。我怎样才能做到这一点?

I want the first element of the list to be used in min heap ordering property.

这就是会发生的事情。您在 heappush 中作为参数传递的项目将进行比较。在 Python 中,列表由第一个成员进行比较,如果是平局,则由第二个成员进行比较,...等等。因此,例如 [2,4,2] 小于 [2,8,1]。这是一种绑定到列表和元组的行为,并不特定于 heapq,但 heapq 依赖它。

在您的示例中,当您继续从堆中弹出元素时,如下所示:

while pq:
    print(heappop(pq))

您将按排序顺序输出它们:

[2, 4, 2]
[4, 0, 1]
[7, 1, 3]

备注

因为你不希望堆上的元素被突变(因为这可能会破坏正确的堆顺序),你最好使用tuples 而不是 lists:

heappush(pq, (4,0,1))
heappush(pq, (7,1,3))
heappush(pq, (2,4,2))