python優先級隊列

| | | | | | | | | | | | | | | | | | | | | | | | | | | |

Python 優先級隊列:指南

A 按特定順序存儲 Python 優先級隊列數據。在 Python 中有兩種實現優先級隊列的方法:使用隊列類並使用 heapq 模塊

您可能希望根據列表中每個項目的值“Äã,Äãã”對數據進行排序。例如,您可能希望最高值首先出現在列表中,而最低值出現在最後一個列表中。

是優先等待隊列進來。優先等待隊列是一個數據結構,根據其鍵的值按升序存儲數據。這使您可以輕鬆訪問隊列中的最小值和最大值。

本教程將解釋為什麼不應該使用列表來創建優先等待隊列。我們將向您展示可用於創建 Python 優先級隊列的兩種更有效的方法。

什麼是 Python 優先級隊列?

優先級隊列是存儲數據的隊列,以哪個項目具有最高優先級。優先級隊列中每個項目的優先級是根據項目的值來決定的。

在計算中,隊列是按FIFO(先進先出)順序排列的內存元素的數據結構。 -出去)。在某些情況下,使用此工具可能會有所幫助。

例如,假設您正在為一家餐館構建一個訂單跟踪應用程序。點菜的人必須先在人們面前服務,然後再下訂單。 .要跟踪命令,您需要使用隊列

在 Python 中有兩種設置優先級隊列的方法:

  • 使用PriorityQueue隊列類
  • 使用 heapq 模塊

可以使用列表結構設置優先級隊列,但是這種策略效率低於使用隊列類或模塊PriorityQueue heapq

優先隊列板:.Queue.PriorityQueue

queue.PriorityQueue 創建一個Python優先隊列,這個類是Python代碼庫的一部分,必須導入隊列庫來使用這個類。要從 PriorityQueue 中檢索項目,可以使用 get() 方法。

要訪問 PriorityQueue 類,我們需要將它導入到我們的代碼中,我們可以這樣做使用這個 import Python 語句

假設我們要創建一個隊列 d `優先等待持票人我們可以使用以下代碼:

我們的代碼返回:

在我們的代碼中,我們首先要從 file 庫中導入 PriorityQueue 類,我們初始化一個稱為 ticket_holders 的優先級隊列。接下來,我們將三個元組放入優先隊列中,即商店票號和與票關聯的名稱。

我們使用 Python 循環 檢查 ticket_holders 優先隊列中的每個項目。然後我們使用 get() 獲取這個元素。

queue.PriorityQueue 方法 有效且易於使用,是您需要時的絕佳選擇創建一個優先級等待隊列。

Python heapq 優先級隊列模塊

heapq 模塊允許您定義一個Python 優先級隊列。 heapq 數據結構按優先級順序刪除項目。在 heapq 結構中,最低值的優先級最低,最高的優先級最高

之前可以使用 heapq 模塊,我們必須首先使用以下導入指令將它導入到我們的代碼中:

要么轉到我們前面的例子。假設我們要創建一個優先級隊列來存儲有關音樂會門票持有人的信息。然後我們可以使用 heapq 模塊和這個程序來做到這一點:

我們的代碼返回:

首先我們導入了heapq庫,然後我們初始化了一個Python 變量 稱為 ticket_holders。我們使用 heappush () 方法將三個元組放入我們的優先級隊列中。該隊列存儲每個持票人的票號和每個持票人的姓名。

然後,我們在遍歷優先級隊列中的每個項目時創建了一個循環。這個循環使用 heappop() 移除等待隊列的頂部元素。然後將刪除的項目打印到控制台。如您所見,我們隊列中的所有項目都按優先級順序打印。

為什麼不應該保留列表

從技術上講,您可以使用 <一個 href="/python-network/">python 列表 數據結構。為此,您必須創建一個列表,然後按升序對它們進行排序。

但是,這是維護優先級隊列的一種相對低效的方法。在編輯列表中的項目時,您需要重新排列列表,這需要時間。

如果您只需要存儲幾個值,您可以使用傳統列表作為優先級隊列。但是如果你想創建一個更大的隊列,列表不是一個好的選擇

作為參考,讓我們看一個使用列表的優先級隊列的示例。假設我們要創建一個優先級隊列,該隊列存儲應獲准參加第一場音樂會的持票人的順序。我們可以使用以下代碼來創建這個隊列:

我們的代碼返回:

我們創建了一個名為ticket_holders的列表,我們在列表中添加了三個元組。每個元組包含持票人的票號及其姓名。接下來,我們使用 Python sort () 函數對持票人列表進行倒序排序。

我們創建了一個長時間循環,遍歷ticket_holders 列表 和列表頂部的項目。然後我們的代碼將刪除的項目打印到控制台。

結論

創建隊列優先級最常見的兩個是使用 heapq 或 queue 模塊。 PriorityQueue 類。雖然在技術上可以使用列表作為優先級隊列,但這種方法效果不佳。

本教程參考示例討論瞭如何在 Python 中創建優先級隊列。您現在已經具備擁有像 Python 專業人士一樣開始構建優先隊列的知識!

有關學習 Python 的更多提示,請參閱我們的 Python 學習指南 < /a>.