1.3 保存最後N個元素

在迭代或者其他形式的處理過程中對最後幾項記錄做一個有限的歷史記錄統計

from collections import deque

def search(lines, pattern, history):
    previous_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line,previous_lines
        previous_lines.append(line)

if __name__ == '__main__':
    with open('somefile.txt') as f:
        for line,prevlines in search(f,'zk',5):
            for pline in prevlines:
                print(pline,end='')
            print(line,end='')
            print('-'*20)

不指定隊列長度可以得到無界限的,append在末尾添加,appendleft在頭部添加
pop彈出末尾,popleft彈出頭部,這些操作複雜度都是O(1),牛逼,不像列表那種鏈表,操作頭部複雜度O(N)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章