- Python算法详解
- 张玲玲
- 352字
- 2020-06-27 17:50:51
2.2.6 将序列分解为单独的变量
在Python程序中迭代处理列表或元组等序列时,有时需要统计最后几项记录以实现历史记录统计功能。下面的实例文件lishi.py演示了将序列中的最后几项作为历史记录的过程。
源码路径:daima\第2章\lishi.py
from _collections import deque def search(lines, pattern, history=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 if __name__ == '__main__': with open('123.txt') as f: for line, prevlines in search(f, 'python', 5): for pline in prevlines: print(pline) # print (pline, end='') print(line) # print (pline, end='') print('-' * 20) q = deque(maxlen=3) q.append(1) q.append(2) q.append(3) print(q) q.append(4) print(q)
在上述代码中,对一系列文本行实现了简单的文本匹配操作,当发现有合适的匹配时,就输出当前的匹配行以及最后检查过的N行文本。使用deque(maxlen=N)创建了一个固定长度的队列。当有新记录加入而使得队列变成已满状态时,会自动移除最老的那条记录。当编写搜索某项记录的代码时,通常会用到含有yield关键字的生成器函数,它能够将处理搜索过程的代码和使用搜索结果的代码成功解耦开来。执行结果如图2-16所示。
图2-16 执行结果