Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

python priorityqueue

作者:整整ー世♂陰霾そ   发布日期:2025-12-28   浏览:62

import heapq

# 创建一个优先队列
class PriorityQueue:
    def __init__(self):
        self._queue = []
        self._index = 0

    def push(self, item, priority):
        # 使用元组 (priority, index, item) 来确保即使两个元素的优先级相同,也能根据插入顺序排序
        heapq.heappush(self._queue, (priority, self._index, item))
        self._index += 1

    def pop(self):
        # 弹出并返回具有最高优先级的元素
        if self._queue:
            return heapq.heappop(self._queue)[-1]
        raise KeyError('pop from an empty priority queue')

    def is_empty(self):
        return len(self._queue) == 0

# 示例使用
pq = PriorityQueue()
pq.push('task1', 3)
pq.push('task2', 1)
pq.push('task3', 2)

while not pq.is_empty():
    print(pq.pop())

解释说明:

  1. heapq 模块:Python 的 heapq 模块提供了堆队列算法的实现,也称为优先队列算法。它是一个二叉堆,支持高效的最小值查找、插入和删除操作。
  2. PriorityQueue:我们定义了一个 PriorityQueue 类来封装优先队列的功能。
    • __init__ 方法初始化一个空的堆队列,并设置索引为 0。
    • push 方法将任务及其优先级添加到队列中。为了确保相同优先级的任务按插入顺序处理,我们使用了 (priority, index, item) 这样的元组。
    • pop 方法弹出并返回具有最高优先级的任务。如果队列为空,则抛出异常。
    • is_empty 方法检查队列是否为空。
  3. 示例使用:创建一个 PriorityQueue 实例,向其中添加几个任务,并依次弹出并打印任务。

希望这段代码和解释对你有帮助!

上一篇:python中replace函数

下一篇:python retrying

大家都在看

python时间格式

pythoneval函数用法

python读取文件路径

staticmethod在python中有

python 保存json文件

python开发windows应用程序

python中len是什么意思

python ord和chr

python中的yield

python自定义异常

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站