有没有一种方法可以检查Python中的优先级队列中是否存在优先级?

用户名

我对Python比较陌生。我正在尝试与queue.PriorityQueue() class并提出问题。有没有一种方法可以检查是否存在特定的优先级?

例如,我有以下内容(priority, element)

(0,A), (1,B), (2,C), (2,D)

有什么方法可以检查优先级是否2存在?(是的,因为CD都是2。)我可以获取具有特定优先级的元素吗?因此,如果我想要具有优先级的元素,2它会给我CD

我在优先级队列上看到的唯一官方文档是:优先级队列官方文档

此类上还有其他文档吗?我可以使用类似的方法吗?可用的班级/领域的结构?

布布

我的理解是,您的最终目标是将具有相同优先级的任务放在列表中并一起返回。所以:

如果要查看queue.PriorityQueue(我做过的)代码,您会发现它基于模块heappushheappop方法,该heapq模块实现了堆队列算法。参见heapq如果您在此页面上进一步浏览,它们甚至显示了如何使用heapq来实现优先级队列。此实现比您需要的实现要复杂一些,因为它支持更改已添加任务的优先级的功能,并且不能完全按照您想要的优先级处理多个任务。但是这些更改很容易实现:

from heapq import heappush, heappop

class PriorityQueue:
    def __init__(self):
        self._pq = [] # list of entries arranged in a heap
        self._priority_finder = {} # mapping of priority to entries

    def add_task(self, task, priority=0):
        'Add a new task'
        # any tasks with this priority?
        entry = self._priority_finder.get(priority)
        if entry:
            entry[1].append(task)
        else:
            entry = [priority, [task]]
            self._priority_finder[priority] = entry
            heappush(self._pq, entry)

    def pop_task(self):
        'Remove and return the lowest priority tasks. Raise KeyError if empty.'
        if not self._pq:
            raise KeyError('pop from an empty priority queue')
        priority, tasks = heappop(self._pq)
        del self._priority_finder[priority]
        return priority, tasks

    def __bool__(self):
        'return True if any tasks on the queue'
        return True if self._pq else False

pq = PriorityQueue()
pq.add_task('a', 4) # task 'a' with priority 4
pq.add_task('b', 2)
pq.add_task('c', 4)
pq.add_task('d', 2)
pq.add_task('e', 1)
while pq:
    print(pq.pop_task())

印刷品:

(1, ['e'])
(2, ['b', 'd'])
(4, ['a', 'c'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果多个元素具有相同的优先级,Python中是否有“ Lifo”类型的优先级队列?

在优先级队列Scala中没有类型

一种实现循环优先级队列的有效方法?

Java 对象优先级队列 :: 一种检查对象成员的方法?

python中的优先级队列

有没有一种方法可以检查函数是否在python中是递归的?

Python中“ in”的优先级

是否可以更改从哪个“侧”对象以相同的优先级添加到优先级队列中?

具有两个优先级Python的优先级队列

带有SyncManager类的python中的多进程优先级队列的队列功能

了解优先级如何与Java优先级队列中的compareTo一起使用?

Python 3中的“优先级堆栈”(优先级队列和堆栈的混合)?

C ++中的优先级队列

优先级队列中的结构比较

.Net中的优先级队列

Java中的优先级队列

在C ++中实现优先级队列

SQL Server中的优先级队列

检查队列中的用户:管理优先级的算法?

在Java中实现优先级队列的有效方法?

在python中的优先级队列中查找值

(Lodash) 有没有一种方法可以检查集合中是否存在(嵌套)相同的对象?

使用Python中的堆创建优先级队列

使用优先级队列在 Python 中实现 LRU 缓存

有什么方法可以在Shiny中的反应式功能中设置优先级?

对具有较高优先级的一系列元素和具有较低优先级的其他元素的优先级队列进行排序

我的优先级队列测试程序是否很慢,因为我没有正确使用Go?

有什么方法可以在Mac OS X中设置进程的优先级?

Android是否可以在adb中显示进程优先级?