gpt4 book ai didi

python - 如何在 Python 中创建唯一值优先级队列?

转载 作者:太空狗 更新时间:2023-10-29 18:25:56 26 4
gpt4 key购买 nike

Python 有 Queue.PriorityQueue,但我看不到让其中的每个值唯一的方法,因为没有检查值是否已存在的方法(如 find(name) 或类似方法)。此外,PriorityQueue 需要优先级保持在值内,所以我什至无法搜索我的值,因为我还必须知道优先级。您将使用 (0.5, myvalue) 作为 PriorityQueue 中的值,然后它将按元组的第一个元素排序。

另一方面,collections.deque 类确实提供了一个功能来检查一个值是否已经存在,并且在使用上更加自然(没有锁定,但仍然是原子的),但它没有提供按优先级排序的方法.

在 stackoverflow 上还有其他一些使用 heapq 的实现,但是 heapq 也在值中使用优先级(例如,在元组的第一个位置),所以它似乎不太适合比较已经存在的值。

Creating a python priority Queue

https://stackoverflow.com/questions/3306179/priority-queue-problem-in-python

创建具有唯一值的原子优先级队列(=可以从多个线程使用)的最佳方法是什么?

例如我想添加的内容:

  • 优先级:0.2,值:value1
  • 优先级:0.3,值:value2
  • 优先级:0.1,值:value3(首先自动获取)
  • Priority: 0.4, Value: value1(不会再添加,即使它有不同的优先级)

最佳答案

您可以将优先级队列与集合结合起来:

import heapq

class PrioritySet(object):
def __init__(self):
self.heap = []
self.set = set()

def add(self, d, pri):
if not d in self.set:
heapq.heappush(self.heap, (pri, d))
self.set.add(d)

def get(self):
pri, d = heapq.heappop(self.heap)
self.set.remove(d)
return d

这使用在您的一个链接问题中指定的优先级队列。我不知道这是否是您想要的,但通过这种方式将集合添加到任何类型的队列都相当容易。

关于python - 如何在 Python 中创建唯一值优先级队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com