队列-deque
Python的 deque 模块是双向队列,属于 collections 库,提供了类似list的容器,可以快速的增加和删除元素。
我们先来看下它有哪些API:
deque.append(x) # 在双向队列的右端增加一个元素x deque.appendleft(x) # 在双向队列左端增加一个元素x deque.clear() # 清除双向列表所有的元素 deque.count(x) # 计算在双向列表内部元素为x的个数 deque.extend(iterable) # 在双向队列的右端增加一个元素,该元素来自传入的列表参数. deque.extendleft(iterable) # 在双向队列的左端增加一个元素,该元素来自传入的列表参数 deque.pop() # 从右端pop一个元素 deque.popleft() # 从左端pop一个元素 deque.remove(value) # 在双向队列里删除首个和value(左端开始)匹配的元素,如果没有找到,抛出异常。 deque.reverse() # 把双向队列里的所有元素的位置反转,相当于对折。 deque.rotate(n) # 双向队列的移位操作,如果n是正数,则队列所有元素向右移动n位.如果是负数,则队列所有元素向左移动n位. 可用于做旋转。 deque.insert(pos, val) # 在指定位置插入元素 deque.index(x) # 返回元素x的索引位置
下面来看一个deque的典型应用:保留最后N个元素。
from collections import deque def search(lines, pattern, history=5): # 保留满足条件的前5行 previous_lines = deque(maxlen=history) # 构造对象时可以指定容器大小 for line in lines: if pattern in line: yield line, previous_lines # 满足条件的元素生成 previous_lines.append(line) # Example use on a file with open(r'somefile.txt') as f: for line, prevlines in search(f, 'python', 5): for pline in prevlines: print(pline, end='') # 输出前五行 print(line, end='') print('-' * 20)