【问题标题】:Search an element in PriorityQueue in Python在 Python 中搜索 PriorityQueue 中的元素
【发布时间】:2019-11-12 17:11:41
【问题描述】:

我刚刚从 Queue 模块开始在 python 中使用 PriorityQueue 模块,但我很难检查某个元素是否存在于 PriorityQueue 中。下面是我的代码 sn-p。

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:- 在上面的代码sn-p中,PriorityQueue默认是MIN_HEAP,我应该使用什么语法我想要一个MAX_HEAP

【问题讨论】:

    标签: data-structures queue priority-queue


    【解决方案1】:

    优先队列是不可迭代的,所以你必须把所有的元素都弹出来,然后再推回去看看里面是否有元素。另一种选择是使用数组来跟踪优先队列中的元素。

    # 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())
    

    【讨论】:

    • 感谢您的回答,我刚刚发现了如何搜索某个元素是否存在(或)不在 PriorityQueue 中。您可以尝试以下语法.................................如果在 q.queue 中可以: print("ELEMENT FOUND ")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2023-01-04
    • 1970-01-01
    • 2023-02-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多