Python 中的队优先级列比较器
本文将研究使用 Python 开发自定义优先级队列。 除此之外,我们还将学习如何将自定义比较器函数与优先级队列一起使用。
Python 中的优先级队列
优先级队列是一种数据结构,允许我们存储具有特定优先级的项目。 然后优先级队列将对项目进行排序,以便具有最高优先级的项目位于队列的顶部。
优先级队列通常用于我们需要按优先级顺序处理项目的算法中。 假设我们正在处理一个任务列表; 我们希望首先处理最重要的任务。
我们可以使用优先队列来做到这一点。
Python 中的优先级队列自定义比较器
Python 中的内置模块queue 提供了优先级队列的实现。 但是,该模块不允许我们为优先级队列指定自定义比较器。
如果我们想对优先级队列使用与默认排序不同的排序,这可能会成为一个问题。
幸运的是,有一种方法可以为 Python 优先级队列创建自定义比较器。 在这篇文章中,我们将看到如何做到这一点。
我们将探讨优先级队列的两个示例。
- 优先队列在 Python 中使用列表
- 优先队列使用Python的heapdict模块
在 Python 中使用列表的优先级队列
首先,我们将制作一个空白列表。 之后,我们将按重要性顺序将每个人的名字添加到列表中。
我们将从 1 开始,逐步提升。 因此,每个名字都会被分配一个编号,作为名单上的优先顺序。
优先级是一个整数,用于确定任务最终完成时的执行顺序。
让我们使用代码来完成它。 首先,我们将创建一个名为 names 的列表。
此列表最初为空。 请参阅下面的代码。
names = []
现在,要将名称添加到列表中,我们将使用可以从列表功能轻松访问的 append 方法。 append 方法需要传入两个参数。
向列表中添加一个数字以指示优先级、数字、名称或其他任何内容。 出于我们的目的,我们希望名字 Abid 出现在列表中的位置 1。
names.append((1, "Abid"))
可以添加的名称或项目的数量没有限制,索引号将指示它们的优先顺序。
示例代码:
names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse = True)
names.append((3, "Anna"))
names.sort(reverse = True)
names.append((2, "Pat"))
当我们在这里使用 while
循环时,名称列表记录将被打印出来。
while names:
print(names.pop())
这是之前创建的相同代码; 复制它并执行它以查看结果。
names = []
names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse = True)
names.append((3, "Anna"))
names.sort(reverse = True)
names.append((2, "Pat"))
names.sort(reverse = True)
while names:
print(names.pop())
输出:
(1, 'Abid')
(2, 'Pat')
(3, 'Anna')
(4, 'Jesica')
这是运行代码的输出。 我们可以清楚地看到,每个名称都是按照我们提供的优先级和索引进行排序的。
Python 中使用 heapdict 模块的优先级队列
基于堆的优先级队列可以通过 heapdict Python 模块访问。 它与普通的 heapq 模块相当,但提供了更多种类的功能和适应性。
二叉堆是 heapdict 数据结构的基础。 二进制堆是一种数据结构,可用于以有助于高效检索和更改数据的方式存储数据。
二叉堆是一棵满二叉树,表示树中的每个节点都有两个后代,树本身总是平衡的。
HeapDict 和 HeapQueue 是 heapdict 模块提供的两个主要类。 heapdict 类的功能类似于字典,并将其内容保存在堆中。
堆用于保存由名为 HeapQueue 的类队列类管理的信息。 HeapDict 和 HeapQueue 类是 dict 类的内置子类。
它们采用了字典的所有方法,并提供了与它们继承的堆进行交互的方法。
请注意
,不会自动为我们安装 heapdict 模块。 我们必须使用下面显示的命令来配置 heapdict。
pip install heapdict
heapdict 库安装完成后,我们就可以在实现优先级队列的过程中使用它了。
- 第一步是导入heapdict的库。
- 创建一个将用于调用 heapdict 函数的变量,并继续使用该变量作为优先级。
- 此时,我们将使用我们之前开发的功能为每个任务分配优先级。
- 利用一个 while 循环。
- 通过打印变量显示结果。
整个代码可以写成下面的形式。
import heapdict
tasks = heapdict.heapdict()
tasks['Breakfast'] = 3
tasks['Wake up'] = 1
tasks['Get ready for work'] = 4
tasks['Exercise'] = 2
while tasks:
print(tasks.popitem())
输出:
('Wake up', 1)
('Exercise', 2)
('Breakfast', 3)
('Get ready for work', 4)
代码的输出表明代码根据分配给代码中各种任务的优先顺序正确运行。 我们活动的输出遵循相同的顺序并指示适当的优先级。
这篇文章教我们如何利用列表构建优先级队列。 除此之外,我们还完成了在 Python 中创建自定义优先级队列的必要步骤。
我们现在知道如何使用优先级队列实现自定义比较器函数。
我们希望您发现本文有助于理解如何在 Python 中创建自定义优先级队列。
相关文章
为 Python 创建别名
发布时间:2023/06/19 浏览次数:194 分类:Python
-
在这种情况下,您决定保留两个版本的 Python。 在本文中,我们将学习如何在拥有两个 Python 版本的情况下创建别名。为 Python 创建别名
从 Python 使用 DLL 文件
发布时间:2023/06/19 浏览次数:60 分类:Python
-
本篇文章将介绍使用 Python 程序中的 DLL 文件。使用 ctypes 库从 Python 使用 DLL 文件 ctypes 是一个在 Python 中提供与 C 兼容的数据类型的外部函数库。
在 Python 中将数据类转换为 JSON
发布时间:2023/06/19 浏览次数:63 分类:Python
-
在本篇文章中,我们将了解 Python 如何支持 JSON 来为每个 JSON 根节点创建数据类。 我们还将学习 dataclass 作为 Python 字典的实现。在 Python 中将数据类转换为 JSON
Python Dict 与 Asdict
发布时间:2023/06/19 浏览次数:177 分类:Python
-
obj._dict_() 背后的概述至少比 dataclasses.asdict(obj) 快十倍。Python 3.7引入了dataclasses库,让我们可以制作专门用于数据存储的结构化类。
在 Qt Creator 中开发 Python 应用程序
发布时间:2023/06/19 浏览次数:60 分类:Python
-
Qt Creator 是一个跨平台的 IDE,可让您为桌面、嵌入式和移动设备创建软件。 它在 Linux、macOS 和 Windows 操作系统上运行。本篇文章将介绍使用 Qt Creator 应用程序开发 Python 应用程序。
Python if-else 速记
发布时间:2023/06/19 浏览次数:72 分类:Python
-
本文解释了 Python 中 if-else 语句的简写表示法,它使用条件、正值和负值作为其组成部分。
Python 地址解析器
发布时间:2023/06/19 浏览次数:101 分类:Python
-
本文将向您展示如何使用 Python 解析地址。 我们将使用 pyparsing 库手动解析地址,并使用函数或 pyparsing 获取 CSV 文件中的地址。
使用 Python 列出串口
发布时间:2023/06/19 浏览次数:53 分类:Python
-
在本文中,我们将讨论使用串口或 com 端口的通信。 我们将深入探索 Python 包,以帮助我们获得系统的可用通信端口。
在 Python 中解析 ISO 8601 日期
发布时间:2023/06/18 浏览次数:121 分类:Python
-
我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime。ISO 8601 日期的结构