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 17 Python
Python 实现网页自动截图的示例讲解
May 17 Python
python遍历小写英文字母的方法
Jan 02 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
对Django中内置的User模型实例详解
Aug 16 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python中tab键是什么意思
Jun 18 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 Python
Python函数对象与闭包函数
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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python中的作用域规则详解
2015/01/30 Python
python方向键控制上下左右代码
2018/01/20 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
北京大学自荐信范文
2014/01/28 职场文书
市场督导岗位职责
2015/04/10 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
刑事案件上诉状
2015/05/23 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
Go语言并发编程 sync.Once
2021/10/16 Golang