最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?queue雙端隊列模塊及用法小結(jié)

 更新時間:2024年02月02日 12:02:12   作者:hakesashou  
雙端隊列是一種具有隊列和棧性質(zhì)的線性數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Python?queue雙端隊列模塊及用法小結(jié),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在“數(shù)據(jù)結(jié)構(gòu)”課程中最常講授的數(shù)據(jù)結(jié)構(gòu)有棧、隊列、雙端隊列。

棧是一種特殊的線性表,它只允許在一端進行插入、刪除操作,這一端被稱為棧頂(top),另一端則被稱為棧底(bottom)。

從棧頂插入一個元素被稱為進棧,將一個元素插入棧頂被稱為“壓入棧”,對應(yīng)的英文說法為 push;相應(yīng)地,從棧頂刪除一個元素被稱為出棧,將一個元素從棧頂刪除被稱為“彈出棧”,對應(yīng)的英文說法為 pop。

對于棧而言,最先入棧的元素位于棧底,只有等到上面所有元素都出棧之后,棧底的元素才能出棧。因此棧是一種后進先出(LIFO)的線性表。如圖 1 所示為棧的操作示意圖。

2-1Z225151411626 (1).gif

隊列也是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,在表的后端(rear)進行插入操作。進行插入操作的端被稱為隊尾,進行刪除操作的端被稱為隊頭。

對于一個隊列來說,每個元素總是從隊列的 rear 端進入隊列的,然后等待該元素之前的所有元素都出隊之后,當(dāng)前元素才能出隊。因此,隊列是一種先進先出(FIFO)的線性表。隊列示意圖如圖 2 所示。

2-1Z22515142N00.gif

雙端隊列(即此處介紹的 deque)代表一種特殊的隊列,它可以在兩端同時進行插入、刪除操作,如圖 3 所示。

2-1Z225151440Z7.gif

對于一個雙端隊列來說,它可以從兩端分別進行插入、刪除操作,如果程序?qū)⑺械牟迦?、刪除操作都固定在一端進行,那么這個雙端隊列就變成了棧;如果固定在一端只添加元素,在另一端只刪除元素,那么它就變成了隊列。因此,deque 既可被當(dāng)成隊列使用,也可被當(dāng)成棧使用。

deque 位于 collections 包下,在交互式解釋器中先導(dǎo)入 collections 包,然后輸入 [e for e in dir(collections.deque) if not e.startswith('_')] 命令來查看 deque 的全部方法,可以看到如下輸出結(jié)果:

>>> from collections import deque
>>> [e for e in dir(deque) if not e.startswith('_')]
['append', 'appendleft', 'clear', 'copy', 'count', 'extend', 'extendleft', 'index', 'insert', 'maxlen', 'pop', 'popleft', 'remove', 'reverse', 'rotate']

從上面的方法可以看出,deque 的方法基本都有兩個版本,這就體現(xiàn)了它作為雙端隊列的特征。deque 的左邊(left)就相當(dāng)于它的隊列頭(front),右邊(right)就相當(dāng)于它的隊列尾(rear):

append 和 appendleft:在 deque 的右邊或左邊添加元素,也就是默認在隊列尾添加元素。

pop 和 popleft:在 deque 的右邊或左邊彈出元素,也就是默認在隊列尾彈出元素。

extend 和 extendleft:在 deque 的右邊或左邊添加多個元素,也就是默認在隊列尾添加多個元素。

deque 中的 clear() 方法用于清空隊列:insert() 方法則是線性表的方法,用于在指定位置插入元素。

假如程序要把 deque 當(dāng)成棧使用,則意味著只在一端添加、刪除元素,因此調(diào)用 append 和 pop 方法即可。例如如下程序:

從上面的方法可以看出,deque 的方法基本都有兩個版本,這就體現(xiàn)了它作為雙端隊列的特征。deque 的左邊(left)就相當(dāng)于它的隊列頭(front),右邊(right)就相當(dāng)于它的隊列尾(rear):

append 和 appendleft:在 deque 的右邊或左邊添加元素,也就是默認在隊列尾添加元素。

pop 和 popleft:在 deque 的右邊或左邊彈出元素,也就是默認在隊列尾彈出元素。

extend 和 extendleft:在 deque 的右邊或左邊添加多個元素,也就是默認在隊列尾添加多個元素。

deque 中的 clear() 方法用于清空隊列:insert() 方法則是線性表的方法,用于在指定位置插入元素。

假如程序要把 deque 當(dāng)成棧使用,則意味著只在一端添加、刪除元素,因此調(diào)用 append 和 pop 方法即可。例如如下程序:

from collections import deque
stack = deque(('Kotlin', 'Python'))
# 元素入棧
stack.append('Erlang')
stack.append('Swift')
print('stack中的元素:' , stack)
# 元素出棧,后添加的元素先出棧
print(stack.pop())
print(stack.pop())
print(stack)

運行上面程序,可以看到如下運行結(jié)果:

stack中的元素: deque(['Kotlin', 'Python', 'Erlang', 'Swift'])
Swift
Erlang
deque(['Kotlin', 'Python'])

從上面的運行結(jié)果可以看出,程序最后入棧的元素“Swift”最先出棧,這體現(xiàn)了棧的 LIFO 的特征。
假如程序要把 deque 當(dāng)成隊列使用,則意味著一端只用來添加元素,另一端只用來刪除元素,因此調(diào)用 append、popleft 方法即可。例如如下程序:

from collections import deque
q = deque(('Kotlin', 'Python'))
# 元素加入隊列
q.append('Erlang')
q.append('Swift')
print('q中的元素:' , q)
# 元素出隊列,先添加的元素先出隊列
print(q.popleft())
print(q.popleft())
print(q)

運行上面程序,可以看到如下運行結(jié)果:

q中的元素: deque(['Kotlin', 'Python', 'Erlang', 'Swift'])
Kotlin
Python
deque(['Erlang', 'Swift'])

從上面的運行結(jié)果可以看出,程序先添加的元素“Katlin”最先出隊列,這體現(xiàn)了隊列的 FIFO 的特征。

此外,deque 還有一個 rotate() 方法,該方法的作用是將隊列的隊尾元素移動到隊頭,使之首尾相連。例如如下程序:

from collections import deque
q = deque(range(5))
print('q中的元素:' , q)
# 執(zhí)行旋轉(zhuǎn),使之首尾相連
q.rotate()
print('q中的元素:' , q)
# 再次執(zhí)行旋轉(zhuǎn),使之首尾相連
q.rotate()
print('q中的元素:' , q)

運行上面程序,可以看到如下輸出結(jié)果:

q中的元素: deque([0, 1, 2, 3, 4])
q中的元素: deque([4, 0, 1, 2, 3])
q中的元素: deque([3, 4, 0, 1, 2])

從上面的輸出結(jié)果來看,每次執(zhí)行 rotate() 方法,deque 的隊尾元素都會被移到隊頭,這樣就形成了首尾相連的效果。

到此這篇關(guān)于Python queue雙端隊列模塊及用法小結(jié)的文章就介紹到這了,更多相關(guān)Python queue雙端隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)TCP服務(wù)器端與客戶端的方法詳解

    python實現(xiàn)TCP服務(wù)器端與客戶端的方法詳解

    這篇文章主要介紹了python實現(xiàn)TCP服務(wù)器端與客戶端的方法,以實例形式詳解分析了Python實現(xiàn)服務(wù)器端與客戶端的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法詳解

    Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法詳解

    這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法,結(jié)合實例形式詳細分析了Python3信息爬取、文件讀寫、圖片存儲等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python中Pytest測試框架的fixture使用詳解

    Python中Pytest測試框架的fixture使用詳解

    這篇文章主要介紹了Python中Pytest測試框架的fixture使用詳解,Pytest的fixture的目的是提供一個測試的基線,在此基線基礎(chǔ)上,可以更可靠的進行重復(fù)測試,需要的朋友可以參考下
    2023-08-08
  • Python中enumerate函數(shù)代碼解析

    Python中enumerate函數(shù)代碼解析

    這篇文章主要介紹了Python中enumerate函數(shù)代碼解析,涉及函數(shù)說明以及相關(guān)示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解

    Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解

    二叉樹是最基本的數(shù)據(jù)結(jié)構(gòu),這里我們在Python中使用類的形式來實現(xiàn)二叉樹并且用內(nèi)置的方法來遍歷二叉樹,下面就讓我們一起來看一下Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解
    2016-05-05
  • 利用Opencv實現(xiàn)圖片的油畫特效實例

    利用Opencv實現(xiàn)圖片的油畫特效實例

    這篇文章主要給大家介紹了關(guān)于利用Opencv實現(xiàn)圖片的油畫特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 讓Django支持Sql Server作后端數(shù)據(jù)庫的方法

    讓Django支持Sql Server作后端數(shù)據(jù)庫的方法

    今天小編就為大家分享一篇讓Django支持Sql Server作后端數(shù)據(jù)庫的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python 將 CSV 分割成多個文件的示例代碼

    Python 將 CSV 分割成多個文件的示例代碼

    在本文中,我們討論了如何使用 Pandas 庫創(chuàng)建 CSV 文件, 此外,我們還討論了兩種常見的數(shù)據(jù)拆分技術(shù),行式數(shù)據(jù)拆分和列式數(shù)據(jù)拆分,需要的朋友可以參考下
    2023-06-06
  • python迭代器自定義類的具體方法

    python迭代器自定義類的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python迭代器自定義類的具體方法,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Elasticsearch py客戶端庫安裝及使用方法解析

    Elasticsearch py客戶端庫安裝及使用方法解析

    這篇文章主要介紹了Elasticsearch py客戶端庫安裝及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09

最新評論

玉龙| 鹿泉市| 马尔康县| 金阳县| 牡丹江市| 和静县| 宜兰县| 高淳县| 商河县| 龙里县| 密云县| 怀宁县| 丹江口市| 武清区| 长兴县| 竹溪县| 连平县| 榕江县| 保亭| 宝坻区| 饶平县| 凌源市| 志丹县| 海晏县| 城步| 荔浦县| 枞阳县| 江口县| 汕尾市| 长葛市| 额尔古纳市| 县级市| 乌拉特后旗| 嘉黎县| 弥渡县| 蓬溪县| 成都市| 罗江县| 无为县| 岳阳市| 河北区|