使用Python中的heapq获取当前堆中的元素列表?

时间:2013-07-17 07:22:07

标签: python class object heap priority-queue

我为了更容易理解和使用而构建了这个结构

    class PriorityQueue:
"""
  Implements a priority queue data structure.
"""
def  __init__(self):
    self.heap = []
    self.count = 0

def push(self, item, priority):
    entry = (priority, self.count, item)
    heapq.heappush(self.heap, entry)
    self.count += 1

def pop(self):
    (_, _, item) = heapq.heappop(self.heap)
    return item

def isEmpty(self):
    return len(self.heap) == 0

我想添加一个方法,该方法将返回此类中当前项目的列表,以便返回列表元素而不会产生费用而不会实际弹出每个项目

有没有这样的方法或我必须提取每个元素

1 个答案:

答案 0 :(得分:0)

您的方法可能如下所示:

def items(self):
    return list(item for _, _, item in self.heap)

这将迭代堆并构建一个新列表,其中包含对堆中项目的引用,而不修改堆。

请注意,如果您的项目是可变对象,则修改列表中的项目也将修改堆中的引用项目。可能是也可能不是。

另请注意,此列表不会按优先级排序。