保留最后N个元素
2016-04-12 15:21
363 查看
问题
在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录?解决方案
保留有限历史记录正是collections.deque大显身手的时候。比如,下面的代码在多行上面做简单的文本匹配, 并返回匹配所在行的前N行:
from collections import deque def search(lines, pattern, history=5): previous_lines = deque(maxlen=history) for li in lines: if pattern in li: yield li, previous_lines previous_lines.append(li) # Example use on a file if __name__ == '__main__': with open(r'../../cookbook/somefile.txt') as f: for line, prevlines in search(f, 'python', 5): for pline in prevlines: print(pline, end='') print(line, end='') print('-' * 20)
讨论
使用deque(maxlen=N)构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。
deque类可以被用在任何你只需要一个简单队列数据结构的场合。 如果你不设置最大队列大小,那么就会得到一个无限大小队列,你可以在队列的两端执行添加和弹出元素的操作。
在队列两端插入或删除元素时间复杂度都是
O(1),而在列表的开头插入或删除元素的时间复杂度为
O(N)。
参考
http://python3-cookbook.readthedocs.org/zh_CN/latest/c01/p03_keep_last_n_items.htmlhttps://github.com/dabeaz/python-cookbook
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法