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 23 Python
python 排序算法总结及实例详解
Sep 28 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python内置random模块生成随机数的方法
May 31 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
pytorch常见的Tensor类型详解
Jan 15 Python
pytorch masked_fill报错的解决
Feb 18 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
Python如何输出百分比
Jul 31 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
如何使用PyCharm及常用配置详解
Jun 03 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python实现随机漫步功能
2018/07/09 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
python实现弹跳小球
2019/05/13 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
应付会计岗位职责
2013/12/12 职场文书
班主任工作年限证明
2014/01/12 职场文书
小区门卫值班制度
2014/01/24 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
2015年市场部工作总结
2015/04/30 职场文书
社区敬老月活动总结
2015/05/07 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
欢送会主持词
2015/07/01 职场文书
思品教学工作总结
2015/08/10 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL