问题
在迭代操作或者其他操作的时候,怎样只保留最后有限的几个元素?
解决方案
使用 deque(maxlen=N)
构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。
from collections import deque
a = [1, 2, 4, 100, 5, 6]
b = deque(maxlen=3)
for i in a:
b.append(i)
print(b)
deque([100, 5, 6], maxlen=3)
尽管可以手动在一个列表上实现一些操作,比如:增加、删除等。但使用这种队列方案,会更加优雅并且运行得更快些。
讨论
deque
类可以被用在任何需要一个简单队列数据结构的场合。可以在队列的两端执行添加和弹出元素的操作。 如果不设置最大队列大小,就会得到一个无限大小的队列。
b.appendleft(-100)
print(b)
deque([-100, 100, 5], maxlen=3)
b.pop()
print(b)
deque([-100, 100], maxlen=3)
b.popleft()
print(b)
deque([100], maxlen=3)
在队列两端插入或删除元素的时间复杂度都是 O(1)
,区别于列表,在列表的开头插入或删除元素的时间复杂度为 O(N)
。
网友评论