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中的字符串操作和编码Unicode详解
Jan 18 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
Python数据类型之Dict字典实例详解
May 07 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
基于python修改srt字幕的时间轴
Feb 03 Python
Python list和str互转的实现示例
Nov 16 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 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 CLI模式下的多进程应用分析
2013/06/03 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
HTML中事件触发列表与解说
2007/07/09 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python复制文件到指定目录的实例
2018/04/27 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
怎样声明接口
2014/09/19 面试题
C#怎么让一个窗口居中显示?
2015/10/20 面试题
校园广播稿500字
2014/02/04 职场文书
母婴店促销方案
2014/03/05 职场文书
家电业务员岗位职责
2014/03/10 职场文书
大学班级学风建设方案
2014/05/01 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB