迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的队优先级列比较器

作者:迹忆客 最近更新:2023/06/19 浏览次数:

本文将研究使用 Python 开发自定义优先级队列。 除此之外,我们还将学习如何将自定义比较器函数与优先级队列一起使用。


Python 中的优先级队列

优先级队列是一种数据结构,允许我们存储具有特定优先级的项目。 然后优先级队列将对项目进行排序,以便具有最高优先级的项目位于队列的顶部。

优先级队列通常用于我们需要按优先级顺序处理项目的算法中。 假设我们正在处理一个任务列表; 我们希望首先处理最重要的任务。

我们可以使用优先队列来做到这一点。


Python 中的优先级队列自定义比较器

Python 中的内置模块queue 提供了优先级队列的实现。 但是,该模块不允许我们为优先级队列指定自定义比较器。

如果我们想对优先级队列使用与默认排序不同的排序,这可能会成为一个问题。

幸运的是,有一种方法可以为 Python 优先级队列创建自定义比较器。 在这篇文章中,我们将看到如何做到这一点。

我们将探讨优先级队列的两个示例。

  1. 优先队列在 Python 中使用列表
  2. 优先队列使用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 库安装完成后,我们就可以在实现优先级队列的过程中使用它了。

  1. 第一步是导入heapdict的库。
  2. 创建一个将用于调用 heapdict 函数的变量,并继续使用该变量作为优先级。
  3. 此时,我们将使用我们之前开发的功能为每个任务分配优先级。
  4. 利用一个 while 循环。
  5. 通过打印变量显示结果。

整个代码可以写成下面的形式。

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 中创建自定义优先级队列。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便