当前位置:
首页 > temp > python入门教程 >
-
1.3 保留最后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)
if __name__ == '__main__':
with open(r'test.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print('-' * 20)
讨论
我们在写查询元素的代码时,通常会使用包含yield
表达式的生成器函数,也就是上面示例代码中的那样。这样可以将搜索过程代码和使用搜索结果代码解耦。
deque是一个双向队列,deque(maxlen=N)
会新建一个固定大小的队列,当新元素加入并且这个队列已满时,最老的一个元素会被移除。
deque类可以被用在任何你只需要一个简单队列数据结构的场合。如果不设置最大队列的大小,那么就可以得到一个可以存储无限多数据的队列,deque可以在队列的两端执行添加和弹出元素的操作:
q = deque()
q.append(1)
q.append(2)
# deque([1, 2])
q.appendleft(4)
# deque([4, 1, 2])
p = q.pop()
# p = 2, q = deque([4, 1])
p = q.popleft()
# p = 4, q = deque([1])
在队列两端插入或删除元素的时间复杂度都是O(1),而在列表开头插入或删除元素的时间复杂度为O(N)(因为后面的元素都要跟着往后或往前移动)。
总结
本节介绍了数据结构——双向队列deque
,并示范了如何使用deque
保留有限历史记录。
原文:https://www.cnblogs.com/L999C/p/15664645.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数