我不明白如何正确使用 heapq 模块。
我意识到,如果不将我的列表转换为堆(不使用 heapify),我仍然可以使用其他需要堆作为输入的函数(heappop、heappush..)。那么什么时候需要使用heapify呢?
我应该创建一个空列表,使用 heapify 将其转换为堆,然后使用它吗?我试过这个。我得到了类型错误。
my_list = heapq.heapify([0])
heapq.heappush(my_list, -8)
TypeError: heap argument must be a list
heapq.heappush(my_list, -8)
在下面的示例中,如果我不将列表转换为堆,我可以使用 heappush 将 -8 推送到我的列表。但是,当我想查看堆的最小元素时,它给了我 0。在 heapq 文档中,它说我可以使用索引 0 到达最小元素。
my_list = [0]
heapq.heappush(my_list, -8)
print(my_list, my_list[0])
output: [0, -8] 0
我正在尝试在循环中使用它,所以我希望能够执行快速推送和弹出操作,而无需在每次迭代中将列表转换为堆,这将需要 O(N)