双端队列deque的应用
Posted jeffrey-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双端队列deque的应用相关的知识,希望对你有一定的参考价值。
collections模块作为基础数据类型的一种扩展,提供了更为丰富的数据结构支持。和list相比,双端队列deque在数组的首部和尾部进行增加和删除元素的时间复杂度都为O(1)。而list在数组尾部进行操作的时间复杂度为O(1),在首部进行增加删除数据的时间复杂度为O(n)(涉及到整个数组元素的移动)。
Deques支持线程安全,内存有效的在队列两端进行删除增加元素操作,在任一方向上具有大致相同的O(1)性能。
类原型:collections.deque([iterable[, maxlen]]),若maxlen未设定或为None,则deque实例的长度可以扩展到任意长度。若指定了具体长度,当新元素从一端加入,且超出maxlen时,另一段的元素会弹出,以确保maxlen的固定值。
deque常用于保持固定长度的操作队列,如下所示:
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('somefile.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print(line, end='')
print('-'*20)
以上是关于双端队列deque的应用的主要内容,如果未能解决你的问题,请参考以下文章