Python cookbook(数据结构与算法)保存最后N个元素的方法


Posted in Python onFebruary 13, 2018

本文实例讲述了Python保存最后N个元素的方法。分享给大家供大家参考,具体如下:

问题:希望在迭代或是其他形式的处理过程中对最后几项记录做一个有限的历史记录统计

解决方案:选择collections.deque。

如下的代码对一系列文本行做简单的文本匹配操作,当发现有匹配时就输出当前的匹配行以及最后检查过的N行文本:

from collections import deque
def search(lines, pattern, history=5):
  previous_lines = deque(maxlen=history)
  for line in lines:
    if pattern in line:
      yield line, previous_lines
    previous_lines.append(line)
# Example use on a file
if __name__ == '__main__':
  with open('somefile.txt') as f:
    for line, prevlines in search(f, 'python', 5):
      for pline in prevlines:
        print(pline, end='')
      print(line, end='')
      print('-'*20)

Python cookbook(数据结构与算法)保存最后N个元素的方法

正如上面的代码一样,当编写搜索某项记录的代码时,通常会用到含有yield关键字的生成器函数,将处理搜索过程的代码与使用搜索结果的代码解耦开来。具体生成器可参考本站迭代器和生成器相关内容。

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

>>> from collections import deque
>>> q=deque(maxlen=3)
>>> q.append(1)
>>> q.append(2)
>>> q.append(3)
>>> q
deque([1, 2, 3], maxlen=3)
>>> q.append(4)
>>> q
deque([2, 3, 4], maxlen=3)
>>> q.append(5)
>>> q
deque([3, 4, 5], maxlen=3)
>>>

尽管可以在列表上手动完成这样的操作(append、del),但队列的这种解决方案要优雅得多,运行速度也快得多。

如果不指定队列长度,则得到一个无界限的队列,可在两端执行添加和弹出操作:

>>> q=deque()
>>> 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
>>> q
deque([1, 2])
>>>

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python获取当前日期和时间的方法
Apr 30 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
python中的for循环
Sep 28 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
简单了解Python3里的一些新特性
Jul 13 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
Python操作redis和mongoDB的方法
Dec 19 Python
pyqt5中动画的使用详解
Apr 01 Python
python实现文法左递归的消除方法
May 22 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 #Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 #Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 #Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 #Python
20个常用Python运维库和模块
Feb 12 #Python
使用python实现BLAST
Feb 12 #Python
Python内置模块logging用法实例分析
Feb 12 #Python
You might like
PHP编程基本语法快速入门手册
2016/01/07 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python如何发布程序的详细教程
2018/10/09 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
Python作用域与名字空间原理详解
2020/03/21 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
副总经理工作职责
2013/11/28 职场文书
体育活动总结范文
2014/05/04 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL