Python系列之Collections内置模块(1)
collections 是 python 的内置模块,源码位于 Lib/collections/__init__.py ,该模块提供了通用的数据容器。
deque 容器对象
通过 from collections import deque 引入,创建 deque 容器对象时,可通过设置参数为 Iterable 对象(如 tuple,list,str)或 maxlen=x(int类型) or None 进行初始化。
deque 容器支持线程安全,通过 append 或 pop 对 deque 的两端进行插入或移除元素时,时间复杂度为 O(1)。与 list 对象相比,list 同样有相同的 api 实现相同的功能,但是对于 pop(0) 或 insert(0, x) 等对 list 的操作,时间复杂度为 O(n)。
如果在初始化 deque 时未声明 maxlen 或声明 maxlen=None,那么 deque 容器可以容纳任意多的元素,否则, deque 容器会被定义为有限长度的元素容器。
一旦容器中的元素个数达到设置的 maxlen,当有新的元素加入时,则会在加入元素一端的另一端排除相同个数的元素,这样可以保证当前 deque 中的元素全部是最新加入的元素。
deque 对象函数
append(x)
appendleft(x)
clear()
copy()
count(x):返回容器中值为 x 的元素个数
extend(iterable)
extendleft(iterable)
index(x):在容器中查到第一个值为 x 的元素索引,如果不存在,抛起 ValueError 异常
insert(idx, x)
pop()
popleft()
remove(x)
reverse():翻转容器中的元素,并返回 None
rotate(n)
deque 对象只读属性
maxlen
除了上述的对象函数外,由于 deque 对象也是 Iterable 对象,那么 len(deque);reversed(deque);copy.copy(deque);copy.deepcopy(deque) 等函数同样起作用,同样 in 操作符也在遍历 deque 操作时使用,切片操作 deque[-1] 也可以返回容器中最后一个元素。如果对容器中的随机元素进行操作的话,建议使用 list。
demo
获取文件中的 python 字符串所在的一行内容,和这行内容的前三行
from collections import deque def search(lines, pattern, maxlen):
pre_lines = deque(maxlen=maxlen)
for line in lines:
if pattern in line:
yield line, pre_lines
pre_lines.append(line) if __name__ == '__main__':
with(open('./test.txt')) as f:
for line, pre_lines in search(f, 'python', 3):
for pre_line in pre_lines:
print(pre_line, end='')
print(line)
输入文本文件内容为
c#
c
c++
javascript
python
java
delphi
python
golang
perl
css
html
python
通过代码输出为
c
c++
javascript
python python
java
delphi
python perl
css
html
python
Python系列之Collections内置模块(1)的更多相关文章
- Python系列之Collections内置模块(2)
defaultdict 返回一个类 dict 的对象,defaultdict 是内置的 dict 类的子类. 如果访问 dict 未初始化的 key 值时,会抛出 KeyError 异常. s_tup ...
- Python系列之heapq内置模块
heapq 是 python 的内置模块,源码位于 Lib/heapq.py ,该模块提供了基于堆的优先排序算法. 堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值.这 ...
- python中的collections
python中有大量的内置模块,很多是属于特定开发的功能性模块,但collections是属于对基础数据的类型的补充模块,因此,在日常代码中使用频率更高一些,值得做个笔记,本文只做主要关键字介绍,详细 ...
- 总结整理 -- python系列
python系列 python--基础学习(一)开发环境搭建,体验HelloWorld python--基础学习(二)判断 .循环.定义函数.继承.调用 python--基础学习(三)字符串单引号.双 ...
- python模块介绍- collections(5)-OrderedDict 有序字典
1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...
- 初探接口测试框架--python系列7
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...
- 初探接口测试框架--python系列2
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...
- 初探接口测试框架--python系列3
点击标题下「微信」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...
- 初探接口测试框架--python系列4
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...
随机推荐
- Jquery实现鼠标拖拽效果
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- Android之事件分发
网上总结的很详细了,有时间总结下做个笔记
- Sematic库系列一
最近在做项目时采用了sematic css 库,由于这个库的资料太少,在做项目中遇到很多问题,在这里做一些记录 1. 下拉框demo HTML 代码 <div class="field ...
- jQuery.extend({...})分析
作者:zccst 看一下是如何写的 jQuery.extend({ prop:"" method:function(){} }); 可以看出,这些方法是jQuery的静态属性和方法 ...
- lpc1768usb端点响应以及描述符定义
#ifndef __USBEP1_H_ #define __USBEP1_H_ #include "usb.h" #include "usbhw.h" exte ...
- tp框架里的 删改
//显示主页面 <table width="> <tr> <td>代号</td> <td>名称</td> <td ...
- handler的使用
2014-04-15 10:45:06 简单学习了handler的使用. 昨天下载的问题,在手机上正常,在平板上不正常. 怀疑是网络的问题. 一直获得的流为空 2014-04-15 18:10:59 ...
- React Native 之 搭建开发环境
现在只能在MAC系统上安装. 1. 首先,HomeBrew 这是一个包管理库,用来下载其它工具. 打开网站:brew.sh 网页有个命令 /usr/bin/ruby -e "$(curl - ...
- Cell.reuseIdentifier 指什么
Cell.reuseIdentifier 指的是 默认为空,如果不定义,在执行 [_tableView registerNib:templateCellNib forCellReuseIdentifi ...
- 译者序(Core Data 应用开发实践指南)
Core Data 是数据管理框架. 该书用Grocery Dude 购物管理程序来贯穿整个学习过程. 本书共分三个部分: 前7章为基础篇.从基础知识.迁移方式及扩展方式来讲解托管对象模型.怎么用图形 ...