我为了更容易理解和使用而构建了这个结构
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
我想添加一个方法,该方法将返回此类中当前项目的列表,以便返回列表元素而不会产生费用而不会实际弹出每个项目
有没有这样的方法或我必须提取每个元素
答案 0 :(得分:0)
您的方法可能如下所示:
def items(self):
return list(item for _, _, item in self.heap)
这将迭代堆并构建一个新列表,其中包含对堆中项目的引用,而不修改堆。
请注意,如果您的项目是可变对象,则修改列表中的项目也将修改堆中的引用项目。可能是也可能不是。
另请注意,此列表不会按优先级排序。