Python之Collections内置模块详细说明
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内置模块详细说明的详细内容,更多请关注其它相关文章!
推荐阅读