1、collections.deque
隊列deque(maxlen=N)構造函數會新建一個固定大小的隊列。當新的元素加入而且這個隊列已滿的時候,最老的元素會自動被移除掉。html
若是你不設置最大隊列大小,那麼就會獲得一個無限大小隊列,你能夠在隊列的兩端執行添加和彈出元素的操做。python
>>> q = deque() >>> q.append(1) >>> q.append(2) >>> q.append(3) >>> q deque([1, 2, 3]) >>> q.appendleft(4) >>> q deque([4, 1, 2, 3]) >>> q.pop() 3 >>> q deque([4, 1, 2]) >>> q.popleft() 4
.append():右插app
.append():左插函數
.pop():右彈出code
.pop():左彈出htm
在隊列兩端插入或刪除元素時間複雜度都是O(1),而在列表的開頭插入或刪除元素的時間複雜度爲O(N)。對象
在迭代操做或者其餘操做的時候,怎樣只保留最後有限幾個元素的歷史記錄?blog
保留有限歷史記錄正是 collections.deque
大顯身手的時候。好比,下面的代碼在多行上面作簡單的文本匹配,並只返回在前N行中匹配成功的行:隊列
from collections import deque def search(lines, pattern, history=5): previous_lines = deque(maxlen=history) for li in lines: if pattern in li: yield li, previous_lines previous_lines.append(li) # Example use on a file if __name__ == '__main__': with open(r'../../cookbook/somefile.txt') as f: for line, prevlines in search(f, 'python', 5): for pline in prevlines: print(pline, end='') print(line, end='') print('-' * 20)
for直接迭代文件句柄就能夠直接使用句柄的迭代器層面的用法。get
yield生成的迭代對象自己就能夠做爲for循環或推導式的迭代對象。