2017-10-08 76 views
-1

我最初尝试使用优先级队列编写一个算法来解决15个难题,但我的教师告诉我们,我们被要求写一个*实现,并建议我们使用heapq而不是优先级队列。我很难找到我的heapq的长度/大小,并且访问我的heapq的元素。我的印象是,通过使用heapq,您将能够访问heapq中您无法在优先级队列中访问的元素。但是,似乎没有任何方法可以从heapq中查找长度/检索元素。你们有没有人知道一种方法来获得heapq的长度/元素或者更适合这种情况的数据结构?访问heapq的索引和长度?

回答

1

heapq堆只不过是其元素尊重特殊(非唯一)顺序的列表。

您可以像使用其他列表一样使用len(heap)

In [1]: import heapq 
In [2]: heap = [40, 10, 20, 30] 
In [3]: heapq.heapify(heap) 
In [4]: heap 
Out[4]: [10, 30, 20, 40] 

In [5]: heapq.heappop(heap) 
Out[5]: 10 

In [6]: heap 
Out[6]: [20, 30, 40] 

In [7]: len(heap) 
Out[7]: 3 

你也应该阅读the python documentation for heapq:在example section应当关心你。