Python:队列deque

Lasted 2020-01-31 11:09:46

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

collections.deque 返回一个双向队列对象,从左到右初始化(用方法 append()) ,从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。

虽然 list 对象也支持类似操作,不过这里优化了定长操作和 pop(0) 和 insert(0, v) 的开销。它们引起 O(n) 内存移动的操作,改变底层数据表达的大小和位置。

1. 创建队列

from collections import deque

queue = deque(["one", "two"])
queue.append("three")

print(queue)
print(queue.popleft())
print(queue)
deque(['one', 'two', 'three'])
one
deque(['two', 'three'])

2. 返回文件最后几行数据 

deque 可实现类似 Unix tail 的过滤功能

from collections import deque

def tail(filename, n=10):
  'Return the last n lines of a file'
  with open(filename) as f:
    return deque(f, n)

text = tail('docsxyz.md')
print(text)
deque(['docsxyz.com\n', 'docsxyz\n'], maxlen=10)

函数返回一个长度为 10 的队列,队列里面的值为文件后几行数据。