未加星标

Python系列之Collections内置模块(1)

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

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 字符串所在的一行内容,和这行内容的前三行

1 from collections import deque 2 3 4 def search(lines, pattern, maxlen): 5 pre_lines = deque(maxlen=maxlen) 6 for line in lines: 7 if pattern in line: 8 yield line, pre_lines 9 pre_lines.append(line) 10 11 12 if __name__ == '__main__': 13 with(open('./test.txt')) as f: 14 for line, pre_lines in search(f, 'python', 3): 15 for pre_line in pre_lines: 16 print(pre_line, end='') 17 print(line)

输入文本文件内容为

1 c# 2 c 3 c++ 4 javascript 5 python 6 java 7 delphi 8 python 9 golang 10 perl 11 css 12 html 13 python

通过代码输出为

c c++ javascript python python java delphi python perl css html python

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

主题: Python数据
分页:12
转载请注明
本文标题:Python系列之Collections内置模块(1)
本站链接:http://www.codesec.net/view/531597.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(54)