python之cookbook-day03
第一章:数据结构和算法
1.3 保留最后 N 个元素
问题:
在迭代操作或其他操作的时候,怎样只保留最后有限几个元素的历史记录?
解决方案:
保留有限历史记录正是 collections.deque 大显身手的时候。比如,下面的代码 cookbook_deque.py 在多行上面做简单的文本匹配,并返回匹配所在行的最后 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_linesprevious_lines.append(line) # Example use on a file if __name__ == '__main__':with open(r'/tmp/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)
附上 /tmp/cookbook/somefile.txt 内容:
[root@xucloud-gdy ~]# cat /tmp/cookbook/somefile.txt aoht awongng python wwwww aaaaa python cccccc dddddd xxxx ooooo pppp weaewae ppppythonww
运行结果如下:
[root@xucloud-gdy 20190131]# python3 cookbook_deque.py aoht awongng python python -------------------- wwwww python -------------------- aaaaa python -------------------- dddddd ppppythonww -------------------- xxxx ppppythonww -------------------- ooooo ppppythonww -------------------- pppp ppppythonww -------------------- weaewae ppppythonww --------------------
使用 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
>>> q
deque([1, 2])
在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元 素的时间复杂度为 O(N) 。
转载于:https://www.cnblogs.com/hotskyi/p/10342708.html
python之cookbook-day03相关推荐
- Python wmi Cookbook 中文翻译
简介: 本文所有的例均是假设你在使用来自 http://timgolden.me.uk/python/wmi/cookbook.html 的 WMI 模块.使用此模块,你可以在 Windows 系 ...
- python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)
s12-20160116-day03 pytho自动化开发 day03 Date:2016.01.16 @南非波波 课程大纲: day2 http://www.cnblogs.com/wupeiqi/ ...
- Python入门学习——DAY03
Day03 Python基础 课程目标:掌握Python基础中的必备语法知识 课程概要: 循环语句 字符串格式化 运算符 1. 循环语句 while循环 for循环(后期) while 条件:.... ...
- python允许无止境的循环_ParisGabriel:Python无止境 day03
print("hello world") 变量 : 存储信息的,日后被调用.修改操作 常量: 固定不变的量,字母大写 命名规则: 1. 字母数字下划线组成 2. 不能以数字开头,不 ...
- Python基础【day03】:字典(一)
本节内容 简述 语法 字典的使用 字典内置方法 一.简述 字典是Python中的又一种数据结构,它是通过key-value的数据类型,跟我们小时候用的新华字典差不多,通过key去访问value 二.语 ...
- python数据分析学习day03:切片索引和统计函数
1. 切片索引 1.1 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样. ndarray 数组可以基于 0 - n 的下标进行索引. ...
- Python 变量类型day03
变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创 ...
- Python第二期-day03
# i 临时变量, 不用提前声明 # range(start, end, step) # step 步长默认是 1 # [start, end) # for i in range(2, 19, 2): ...
- Python学习笔记Day03
文章目录 数据类型转换 分类 原则:不同的数据之间无法进行运算 自动数据类型转换 运算 判断 强制类型数据转换 强制转换为整型 Int 1.使用`int()` 2.浮点数转换为整数,只保留整数部分 3 ...
- 想要学习Python爬虫,看这几本书就够了
网页抓取就是从网站中提取数据,因为有很多网站,已经有很多开发工具可以用来浏览网站(web爬行)寻找特定的数据片段并自动收集它们(web抓取).收集到的数据大多是非结构化的HTML形式,之后再将其转化为 ...
最新文章
- [Sdoi2017]硬币游戏 [高斯消元 KMP]
- ceo for one month final around
- DCMTK:OFStandard类中的double / ascii转换方法的测试代码
- ubuntu16.04安装KDE
- Thrift序列化字节数组存取redis VS 对象转Json存取Redis
- 7-55 列车调度 (25 分)
- 采用Matlab编程实现 高频强调滤波,[转载]MATLAB图像处理-基于高频强调滤波和直方均衡化图像增强...
- 一支python教学_第一只python爬虫
- 交通灯倒计时c语言程序,交通灯C语言程序,T89S52单片机控制,倒计时,红黄绿灯.doc...
- 福利来了,axure8.1注册码
- c语言算无限小数,随机算式的除法如果答案是无限循环小数,怎么加精度?
- PHP对接银联电子支付接口开发
- html生成pdf java_Java实现HTML代码生成PDF文档
- 加来道雄 基因编辑 纳米机器人_同样基因编辑技术,为什么2位学者获得诺奖,中国贺建奎被痛骂?!...
- 欧几里德算法 扩展欧几里德算法 求解丢番图方程
- 2020-08-15
- Apple Music 推出空间音频和无损音频
- imac15款和17款区别_5K屏2019款iMac轻体验:优缺点都很明显
- AI 人工智能 探索 (九)
- UI5:创建.yaml文件报错:无法加载文件 C:\Users\86178\AppData\Roaming\npm\ui5.ps1
热门文章
- 南邮linux期末考试试题,南邮操作系统试卷及答案.doc
- 经验 | 非科班出身怎么转行计算机?
- FCN用卷积层代替FC层原因(转)
- 自动驾驶使用贝塞尔曲线进行静态障碍物避障测试
- vlookup 2张表 显示na_【Excel 函数】Vlookup 正反向查询
- 系统无法执行指定的程序。_使用Rust编写操作系统(一):独立式可执行程序
- 编写一个脚本判断某个用户是否处在活动模式_使用 TypeScript 编写爬虫
- 人脸识别接口_人工智能 人脸识别双目模组摄像头 活体检测的重要作用
- 常见数据库默认端口号
- java11和13_Java1113