創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),潞城企業(yè)網(wǎng)站建設(shè),潞城品牌網(wǎng)站建設(shè),網(wǎng)站定制,潞城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,潞城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。這篇文章主要介紹Python中queue雙端隊(duì)列模塊的簡(jiǎn)介,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在“數(shù)據(jù)結(jié)構(gòu)”課程中最常講授的數(shù)據(jù)結(jié)構(gòu)有棧、隊(duì)列、雙端隊(duì)列。
棧是一種特殊的線性表,它只允許在一端進(jìn)行插入、刪除操作,這一端被稱為棧頂(top),另一端則被稱為棧底(bottom)。
從棧頂插入一個(gè)元素被稱為進(jìn)棧,將一個(gè)元素插入棧頂被稱為“壓入棧”,對(duì)應(yīng)的英文說(shuō)法為 push;相應(yīng)地,從棧頂刪除一個(gè)元素被稱為出棧,將一個(gè)元素從棧頂刪除被稱為“彈出?!?,對(duì)應(yīng)的英文說(shuō)法為 pop。
對(duì)于棧而言,最先入棧的元素位于棧底,只有等到上面所有元素都出棧之后,棧底的元素才能出棧。因此棧是一種后進(jìn)先出(LIFO)的線性表。如圖 1 所示為棧的操作示意圖。
隊(duì)列也是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端被稱為隊(duì)尾,進(jìn)行刪除操作的端被稱為隊(duì)頭。
對(duì)于一個(gè)隊(duì)列來(lái)說(shuō),每個(gè)元素總是從隊(duì)列的 rear 端進(jìn)入隊(duì)列的,然后等待該元素之前的所有元素都出隊(duì)之后,當(dāng)前元素才能出隊(duì)。因此,隊(duì)列是一種先進(jìn)先出(FIFO)的線性表。隊(duì)列示意圖如圖 2 所示。
雙端隊(duì)列(即此處介紹的 deque)代表一種特殊的隊(duì)列,它可以在兩端同時(shí)進(jìn)行插入、刪除操作,如圖 3 所示。
對(duì)于一個(gè)雙端隊(duì)列來(lái)說(shuō),它可以從兩端分別進(jìn)行插入、刪除操作,如果程序?qū)⑺械牟迦?、刪除操作都固定在一端進(jìn)行,那么這個(gè)雙端隊(duì)列就變成了棧;如果固定在一端只添加元素,在另一端只刪除元素,那么它就變成了隊(duì)列。因此,deque 既可被當(dāng)成隊(duì)列使用,也可被當(dāng)成棧使用。
deque 位于 collections 包下,在交互式解釋器中先導(dǎo)入 collections 包,然后輸入 [e for e in dir(collections.deque) if not e.startswith('_')] 命令來(lái)查看 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 的方法基本都有兩個(gè)版本,這就體現(xiàn)了它作為雙端隊(duì)列的特征。deque 的左邊(left)就相當(dāng)于它的隊(duì)列頭(front),右邊(right)就相當(dāng)于它的隊(duì)列尾(rear):
append 和 appendleft:在 deque 的右邊或左邊添加元素,也就是默認(rèn)在隊(duì)列尾添加元素。
pop 和 popleft:在 deque 的右邊或左邊彈出元素,也就是默認(rèn)在隊(duì)列尾彈出元素。
extend 和 extendleft:在 deque 的右邊或左邊添加多個(gè)元素,也就是默認(rèn)在隊(duì)列尾添加多個(gè)元素。
deque 中的 clear() 方法用于清空隊(duì)列:insert() 方法則是線性表的方法,用于在指定位置插入元素。
假如程序要把 deque 當(dāng)成棧使用,則意味著只在一端添加、刪除元素,因此調(diào)用 append 和 pop 方法即可。例如如下程序:
從上面的方法可以看出,deque 的方法基本都有兩個(gè)版本,這就體現(xiàn)了它作為雙端隊(duì)列的特征。deque 的左邊(left)就相當(dāng)于它的隊(duì)列頭(front),右邊(right)就相當(dāng)于它的隊(duì)列尾(rear):
append 和 appendleft:在 deque 的右邊或左邊添加元素,也就是默認(rèn)在隊(duì)列尾添加元素。
pop 和 popleft:在 deque 的右邊或左邊彈出元素,也就是默認(rèn)在隊(duì)列尾彈出元素。
extend 和 extendleft:在 deque 的右邊或左邊添加多個(gè)元素,也就是默認(rèn)在隊(duì)列尾添加多個(gè)元素。
deque 中的 clear() 方法用于清空隊(duì)列: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)
運(yùn)行上面程序,可以看到如下運(yùn)行結(jié)果:
stack中的元素: deque(['Kotlin', 'Python', 'Erlang', 'Swift']) Swift Erlang deque(['Kotlin', 'Python'])
從上面的運(yùn)行結(jié)果可以看出,程序最后入棧的元素“Swift”最先出棧,這體現(xiàn)了棧的 LIFO 的特征。
假如程序要把 deque 當(dāng)成隊(duì)列使用,則意味著一端只用來(lái)添加元素,另一端只用來(lái)刪除元素,因此調(diào)用 append、popleft 方法即可。例如如下程序:
from collections import deque q = deque(('Kotlin', 'Python')) # 元素加入隊(duì)列 q.append('Erlang') q.append('Swift') print('q中的元素:' , q) # 元素出隊(duì)列,先添加的元素先出隊(duì)列 print(q.popleft()) print(q.popleft()) print(q)
運(yùn)行上面程序,可以看到如下運(yùn)行結(jié)果:
q中的元素: deque(['Kotlin', 'Python', 'Erlang', 'Swift']) Kotlin Python deque(['Erlang', 'Swift'])
從上面的運(yùn)行結(jié)果可以看出,程序先添加的元素“Katlin”最先出隊(duì)列,這體現(xiàn)了隊(duì)列的 FIFO 的特征。
此外,deque 還有一個(gè) rotate() 方法,該方法的作用是將隊(duì)列的隊(duì)尾元素移動(dòng)到隊(duì)頭,使之首尾相連。例如如下程序:
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)
運(yùn)行上面程序,可以看到如下輸出結(jié)果:
q中的元素: deque([0, 1, 2, 3, 4]) q中的元素: deque([4, 0, 1, 2, 3]) q中的元素: deque([3, 4, 0, 1, 2])
從上面的輸出結(jié)果來(lái)看,每次執(zhí)行 rotate() 方法,deque 的隊(duì)尾元素都會(huì)被移到隊(duì)頭,這樣就形成了首尾相連的效果。
以上是Python中queue雙端隊(duì)列模塊的簡(jiǎn)介的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
分享標(biāo)題:Python中queue雙端隊(duì)列模塊的簡(jiǎn)介-創(chuàng)新互聯(lián)
鏈接URL:http://jinyejixie.com/article4/dcpgoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站收錄、微信小程序、移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容