Python cookbook(数据结构与算法)保存最后N个元素的方法
作者:垄上行 发布时间:2023-08-08 05:06:38
标签:Python,数据结构与算法,最后N个元素
本文实例讲述了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)
正如上面的代码一样,当编写搜索某项记录的代码时,通常会用到含有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程序设计有所帮助。
来源:http://www.cnblogs.com/apple2016/p/5744380.html


猜你喜欢
- 目录1. 前言2. 介绍及安装3. 实战一下3-1 创建爬虫项目3-2 创建爬虫 Ai
- DECLARE @MyCounter INT SET @MyCounter = 0 /*设置变量*/ WHILE (@MyCounter &
- <script> Function.prototype.createInstance = function(){ var T =
- 导语在CSDN学习的过程中,遇到了爆火的文章是关于刮刮卡的!大家猜猜看是谁写的?我看这文章都特别火,我也感觉挺好玩的,那就寻思用 Pytho
- 1、值为列表的构造实例dic = {}dic.setdefault(key,[]).append(value)*********示例如下**
- 安装需要的包1 第一步:全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理。haystack:全文检索的
- 如下所示:def list_all_files(rootdir): import os _files = [] list = os.list
- Whoosh 是纯Python实现的全文搜索引擎,通过Whoosh可以很方便的给文档加上全文索引功能。什么是全文检索简单讲分为两块,一块是分
- 第一次用layui,正在摸索中,今天在学习layui的时候在项目中看到一个表单提交,表单的数据传到后台是怎么自动封装到实体类里面的呢?1、表
- 本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下代码:from turtle import *#控制彩虹路径d
- API:statuses/public_timeline 返回最新的200条公共微博,返回结果非完全实时CODE:#!/usr/
- 目录前言1 异常类型1.1 Python内置异常1.2 requests模块的相关异常1.3 用户自定义异常2. 异常捕获2.1&
- 1.数据库约束约束是关系型数据库提供的一种校验数据合法性的机制. 1.1 约束类型约束类型说明示例null使用not null 指
- 下载资源hadoop3.0.0spark-2.4.4-bin-without-hadoopwinutils下载(对应hadoop3.0.1的
- 代码很简单,主要是修改了下百度分享的部分代码,小伙伴们自己对比下。<div class="tool_title"&
- 用python的matplotlib画图时,往往需要加图例说明。如果不设置任何参数,默认是加到图像的内侧的最佳位置。import matpl
- 不同于其他软件项目,互联网项目的开发有其独有的特性。互联网项目开发不同于传统软件项目开发不同于需求定制性的软件开发公司。客户的需求是明确的,
- function is_utf8($string) { &n
- 字符串(sting)是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符。
- 文件和文件组简介在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。S