如果我将列表元素推入堆中,将使用什么堆排序 属性?
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))
假设我创建一个堆并将一些列表元素压入堆中,如下所示:
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))