Python教程:Python内置数据结构之双向队列!
經(jīng)常聽說Python就是一門執(zhí)行速度低的語言,可能是你的程序中使用了復(fù)雜的算法與數(shù)據(jù)結(jié)構(gòu),才會導(dǎo)致程序執(zhí)行速率低的。在Python的標(biāo)準(zhǔn)庫中提供了常見的數(shù)據(jù)結(jié)構(gòu)工開發(fā)者使用,不僅執(zhí)行速率比較快,還可以簡化開發(fā)者的編程工作。下面我來介紹其中的雙向隊列:
collections模塊中的deque類,就是雙向隊列,這種隊列可以從頭部或者尾部添加或者移除元素,這種操作的所消耗的時間時常數(shù)級別的,所以它非常合適表示先進(jìn)先出的隊列。
#演示先進(jìn)先出的隊列操作
from collections import deque
queue = deque()
#添加數(shù)據(jù)
queue.append(20)
queue.append(30)
queue.append(40)
print(queue) # deque([20, 30, 40])
#移除數(shù)據(jù)
queue.popleft()
print(queue) # deque([30, 40])
這種情況下,也許有人會說列表也可以做這種操作的,那么區(qū)別是什么?區(qū)別是列表是單向的,在尾部添加或者移除數(shù)據(jù)的操作耗時是常數(shù)級別的,但是如果在頭部添加或者移除數(shù)據(jù)卻是線性級別(耗時與數(shù)據(jù)大小成正比)的,那么對比雙向隊列來說,就慢許多了,可以看下面代碼
from time import time
#演示先進(jìn)先出的隊列操作
from collections import deque
#在雙向隊列中添加數(shù)據(jù)
queue = deque()
for i in range(20000):
queue.append(i)
print(queue)
start = time()
queue.popleft()
end = time()
print(end - start) # 3.0994415283203125e-06 不同機器耗時不一樣 可以在自己的電腦上測試
#在列表中添加相同的數(shù)據(jù) 做一樣的操作
nums = list()
for i in range(20000):
nums.append(i)
print(nums)
start = time()
nums.pop(0)
end = time()
print(end - start) # 1.5020370483398438e-05 不同機器耗時不一樣 可以在自己的電腦上測試
從上面兩組數(shù)據(jù)來看,列表list做先進(jìn)先出操作耗時比雙向隊列deque完成相應(yīng)的操作多很多的。所以要完成先進(jìn)先出的隊列操作時應(yīng)該選擇雙向隊列deque.
本文來自千鋒教育,轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的Python教程:Python内置数据结构之双向队列!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python工程师求职必知的经典面试题!
- 下一篇: Python教程:Python基础知识点