利用python 的collections.deque保存最后N个元素

参考《python cookbook》
如果需要在迭代或者其他形式的处理过程中对最后几项纪录做一个有限的历史记录统计,我们可以使用collections.deque

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2024/7/14 下午9:18
# @Author  : s
# 对文本做简单的文本匹配处理,当发现有匹配时,就输出当前的匹配行以及最后检查过的N行文本
from collections import deque


def search_d(lines, pattern, histoy=5):
    previuos_lines = deque(maxlen=histoy)
    for line in lines:
        if pattern in line:
            yield line, previuos_lines
        previuos_lines.append(line)


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

deque(maxlen=N) 创建一个固定长度的队列,当有新的记录加入且此时队列已满,则会自动移除最老的那条记录

image.png

这样操作比del等优雅的多,运行速度也比较快。
deque(maxlen=N) 还可以对队列的两端执行添加和弹出操作。
image.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容