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使用多线程不断刷新网页的方法
Mar 31 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
浅谈Python 的枚举 Enum
Jun 12 Python
Python实现KNN邻近算法
Jan 28 Python
Python找出最小的K个数实例代码
Jan 04 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
python编写函数注意事项总结
Mar 29 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
实操Python爬取觅知网素材图片示例
Nov 27 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
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
javascript数组详解
2014/10/22 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
javascript 操作cookies详解及实例
2017/02/22 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
Python 必须了解的5种高级特征
2020/09/10 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
商场经理竞聘演讲稿
2014/01/01 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
python数据处理之Pandas类型转换
2022/04/28 Python