1、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)

应用功能:

保存有限的历史记录collections.deque的完美应用场景,例如下面的代码对一段文本做简单的文本匹配处理,当发现有匹配的时就输出当前的匹配行,
以及最后检查过的N行文本

from collections import deque

def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history) #collection.deque : deque (maxlen=N)创建了一个固定长度的队列,当有新的队列已满时会自动移除最老的那条记录 # deque([], maxlen=5) 创建一个队列
for line in lines:
print('当前要匹配行:', line)
if pattern in line:
yield line, previous_lines # previous: deque(['python1\n', 'python2\n', '怎么办呢,\n'], maxlen=5) if __name__ == '__main__':
with open('somefile.txt') as f:
for line, previous in search(f, 'python', 5): # 调用search函数,每次yield当前匹配的文本和最后匹配检查过的N行文本
print('line:',line,'previous:',previous)
for pline in previous:
print('最后匹配检查过的N行文本:',pline, end='')
print('-' * 20) """ somefile.txt文本内容: python1
python2
怎么办呢,
失效一处python3。 输出:
当前要匹配行: python1 line: python1
previous: deque([], maxlen=5)
--------------------
当前要匹配行: python2 line: python2
previous: deque(['python1\n'], maxlen=5)
最后匹配检查过的N行文本: python1
--------------------
当前要匹配行: 怎么办呢, 当前要匹配行: 失效一处python3。
line: 失效一处python3。 previous: deque(['python1\n', 'python2\n', '怎么办呢,\n'], maxlen=5)
最后匹配检查过的N行文本: python1
最后匹配检查过的N行文本: python2
最后匹配检查过的N行文本: 怎么办呢,
-------------------- """

python之保留有限的历史记录(collections.deque)的更多相关文章

  1. 使用deque保留有限的记录

    # 使用deque保留有限的记录 >>> from collections import deque >>> q = deque(maxlen=3) # 指定队列的 ...

  2. [python] Queue.Queue vs. collections.deque

    https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque/717199#717199 Queue,Queu ...

  3. 用 Python 获取 B 站播放历史记录

    用 Python 获取 B 站播放历史记录 最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数.过去一年我居然在 B 站上看了2600+个视频,总计251个小时,居然花 ...

  4. collections.deque

    d = collections.deque([])  # 创建双端队列d.append('a') # 在最右边添加一个元素,此时 d=deque('a')d.appendleft('b') # 在最左 ...

  5. python collections deque

    collections是python的高级容器类库,包含了dict.truple之外的常用容器. 下面介绍常用的deque 1. deque是双端队列,可以从两端塞元素进去,也可以从两端取元素. 2. ...

  6. 739. Daily Temperatures && 单调栈 && Python collections deque

    题目大意 给你接下来每一天的气温,求出对于每一天的气温,下一次出现比它高气温的日期距现在要等多少天 解题思路 利用单调栈,维护一个单调递减的栈 将每一天的下标i入栈,维护一个温度递减的下标 若下一个温 ...

  7. Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数

     一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...

  8. python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)

    collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...

  9. 【python】超有用的集合类collections,不来了解一下?

    在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典. 那实际应用中我们更多的还是要去操作这些结构里的数据.比如,在列表后面添 ...

随机推荐

  1. yum update过程中失败后再次执行出现“xxxx is a duplicate with xxxx”问题

    问题现象: 解决办法: 利用yum-uitls中的工具package-cleanup指令,使用方法见下图,具体可通过man package-cleanup查询 列出重复的rpm包        pac ...

  2. php的闭包函数use的使用

    PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字. function getMoney() {   $rmb = 1;   $dollar = 6;   $fun ...

  3. 修改maven包本地默认位置

    前言 这段时间上岸了,就有时间整理电脑的资料(强迫症重度患者),就向maven以及gradle的仓库位置动手了. 目的 改变maven的默认位置 步骤 修改maven的配置文件setting.xml( ...

  4. Msys2升级后不能编译

    Msys2升级后不能编译 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} cod ...

  5. 牛客练习赛48 C,D,E

    C 小w的糖果 题意:3种操作,第一种是使pos右边的数全部+1,第二种是pos右边的数依次+k(k从1开始递增),第三种是pos右边的数依次+k^2(k从1开始递增). 解法:第一种我们很容易想到差 ...

  6. laravel将数组转换成集合

    $myArray = collect($this -> menuPermissionTypes); //$this -> menuPermissionTypes是数组! dd($myArr ...

  7. DenyHosts 安全限制ssh防暴力破解

    DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP ...

  8. centos 单用户登陆模式操作

    在centos中因为安装java而配置 jdk环境变量的原因,对/etc/profile文件进行了编辑 错误的环境变量配置导致在第一次修改profile文件并保存后,执行source /etc/pro ...

  9. 【Codeforces Beta Round #88 C】Cycle

    [Link]:http://codeforces.com/problemset/problem/117/C [Description] 问你一张图里面有没有一个三元环,有的话就输出. [Solutio ...

  10. move_base 分层代价地图的作用(翻译)

    A. 标准层 ​ Static Map Layer:为了做全局规划,机器人需要一个超越其传感器的地图,以了解墙壁和其他静态障碍物的位置. 静态地图可以先用SLAM算法生成,也可以从架构图中创建. 当层 ...