python 数据内容保留最后一位_python3-数据结构和算法 -- 1.3 保留最后 N 个元素
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)
# 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)
讨论
我们在写查询元素的代码时,通常会使用包含 yield 表达式的生成器函数,也就是我们上面示例代码中的那样。 这样可以将搜索过程代码和使用搜索结果代码解耦。
使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。
代码示例:
>>> 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)
尽管你也可以手动在一个列表上实现这一的操作(比如增加、删除等等)。但是这里的队列方案会更加优雅并且运行得更快些。
更一般的, 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
在队列两端插入或删除元素时间复杂度都是 O(1) ,区别于列表,在列表的开头插入或删除元素的时间复杂度为 O(N) 。
python 数据内容保留最后一位_python3-数据结构和算法 -- 1.3 保留最后 N 个元素相关推荐
- python数据的存储结构是指_python数据结构
一.算法入门 程序设计 = 数据结构 + 算法 算法时为了解决实际问题而设计的,数据结构是算法需要处理的问题载体 数据结构只是静态的描述呢数据元素之间的关系 高效的程序需要再数据结构的基础上设计和选择 ...
- python程序结构有哪几种_Python数据结构与算法(几种排序)小结
Python数据结构与算法(几种排序) 数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺 ...
- 获取多张表中的数据_趣说:什么是数据结构和算法
相信你的电脑里面 应该有这么一个 视频教程文件夹 不用我说 在这里面肯定是你 精心收藏的精华教程 不辞辛劳的你 按照每个优秀的老师 都分门别类的安排好 每一系列的精品教程 当你心血来潮之时 亦或是求知 ...
- java set第n位_数据结构与算法——常用数据结构及其Java实现
本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...
- python数据内容_炼数成金:Python数据分析内容分享
相信看这篇文章的每一位朋友,都有过努力学习 炼数成金:Python数据分析 这个课程.提升自我的想法, 可是学习是一件非常反人性的事情,大多数人都是晚上想想千条路,早上醒来走原路. 也相信很 ...
- python 判断div 之间的内容是否为空_python实现数据结构与算法之双端队列实现
简介 双端队列(deque, double-ended queue),是一种具有队列和栈的性质的数据结构.双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行.双端队列可以在队列任意一端 ...
- oledbdataadapter 取不到数据 plsql能取到 date_Python3 CookBook | 数据结构和算法(二)...
欢迎关注我的微信公众号 AlwaysBeta,更多精彩内容等你来. 以下测试代码全部基于 Python3 1.查找最大或最小的 N 个元素 工作中有时会遇到这样的需求,取出数据中前面 10% 的值,或 ...
- python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)
链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...
- python编写代码运用递归画图形_python数据结构与算法 22 递归图形
上节中我们已经知道有些问题,如果用递归解决变得非常容易.但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么.这一节我们引入几个例子,用递归的方法画几个有趣的图形 ...
最新文章
- iOS 9应用开发教程之ios9中实现按钮的响应
- 说说 “后台开发” 需要注意哪几点
- WPF:仿WIN7窗体打开关闭效果
- SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false...
- 谷歌浏览器如何如何禁用弹出窗口阻止程序
- td外边加div为啥不隐藏_过年炸油饼注意了,秘制配方比例教给你,柔软不吸油,放凉了不硬...
- 谷歌终于推出TensorFlow Lite,实现在移动设备端部署AI
- MySQL 5.7安装(多实例)最佳实践
- python生成器表达式yield,面向过程编程,部分内置函数
- seay代码审计mysql插件报错_Seay源代码审计系统v2.0源码
- 运动斗士终南山的不老之道
- 在淘宝做前端的这三年 — 第二年
- 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
- 监控安防人员入门基础
- 阿里云云数据库(RDS)的登录问题
- 服务器被一堆系统登录_饥荒联机云服务器开档
- CHINA TOP国家杯:用电子竞技搭建中国文化走出去的平台
- Dropbear-轻量级SSH服务器和客户端
- mysql超市表格_py mysql结合面向对象,实现类似超市导购机器的功能【1.初始化表数据】...
- Bug处理之数据库导入Warning: 1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column