我刚刚从PriorityQueue队列模块开始在python中使用模块,但是我很难检查PriorityQueue中是否存在一个元素。下面是我的代码片段。
from queue import PriorityQueue
q = PriorityQueue()
q.put(3)
q.put(2)
q.put(1)
ok = 4
if ok in q:
print("Found")
但是我得到了下面的错误。
TypeError:类型为“PriorityQueue”的参数不可迭代
请告诉我如何迭代和检查python中的PriorityQueue模块中是否存在一个元素。
怀疑2 :-在上面的代码片段中,PriorityQueue是MIN_HEAP默认情况下,我应该使用什么样的语法--我想要MAX_HEAP
发布于 2019-11-12 09:33:31
优先级队列是不可迭代的,因此您必须弹出所有元素,然后将它们推回以查看元素是否在其中。另一个选项是使用数组来跟踪优先级队列中的元素。
# Assume all the elements are in a range of 0 ~ 999
from queue import PriorityQueue
cnt = [0] * 1000
q = PriorityQueue()
q.put(3)
cnt[3] += 1
q.put(2)
cnt[2] += 1
q.put(1)
cnt[1] += 1
ok = 4
if cnt[ok]:
print("Found")
对于疑问2,获得最大堆的最简单方法是插入元素的负值。
max_heap = PriorityQueue()
max_heap.put(-10) // 10
max_heap.put(-20) // 20
max_heap.put(-15) // 15
max_heap.put(-27) // 27
while not max_heap.empty():
print(-1*max_heap.get())
https://stackoverflow.com/questions/58823511
复制