博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用
阅读量:5074 次
发布时间:2019-06-12

本文共 1179 字,大约阅读时间需要 3 分钟。

一、collections.deque队列

deque(maxlen=N)构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉。

如果你不设置最大队列大小,那么就会得到一个无限大小队列,你可以在队列的两端执行添加和弹出元素的操作。

1、deque其他操作:

>>> q = deque()>>> q.append(1)>>> q.append(2)>>> q.append(3)>>> qdeque([1, 2, 3])>>> q.appendleft(4)>>> qdeque([4, 1, 2, 3])>>> q.pop()3>>> qdeque([4, 1, 2])>>> q.popleft()4

.append():右插

.append():左插

.pop():右弹出

.pop():左弹出

2、和list比较的优点:

在队列两端插入或删除元素时间复杂度都是O(1),而在列表的开头插入或删除元素的时间复杂度为O(N)。

 

二、问题

在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录?

解决方案

保留有限历史记录正是 collections.deque 大显身手的时候。比如,下面的代码在多行上面做简单的文本匹配,并只返回在前N行中匹配成功的行:

from collections import dequedef 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 fileif __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)

for直接迭代文件句柄就可以直接使用句柄的迭代器层面的用法。

yield生成的迭代对象本身就可以作为for循环或的迭代对象。

 

转载于:https://www.cnblogs.com/hellcat/p/8565926.html

你可能感兴趣的文章
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>