固定长度FIFO的Python数据类型
我想知道在Python中有没有一种原生的数据类型,可以像固定长度的先进先出(FIFO)缓冲区那样工作。比如,我想创建一个长度为5的FIFO缓冲区,初始化时全是零。它看起来应该是这样的:
[0,0,0,0,0]
然后,当我在这个对象上调用放入(put)函数时,它会把最后一个零挪走,把新的值,比如1,放到最左边:
[1,0,0,0,0]
如果我再放一个2,它就会再挪动一次,变成这样:
[2,1,0,0,0]
...依此类推。新的值放在最前面,最旧的值被挪走。我知道自己实现这个功能很简单,但我想尽量使用Python的原生数据类型。有没有人知道哪种数据类型最适合这个用途?
4 个回答
9
再给这个帖子举一个例子
from collections import deque
domains = ['1.com','2.com','3.com']
d = deque(domains)
d.pop() #pop(delete) 3.com here
d.appendleft('new.com')
print d
结果:
deque(['new.com', '1.com', '2.com'])
15
你也可以使用列表
a = [0,0,0,0,0]
a.pop(0)
a.append(1)
print a
result [0,0,0,0,1]
或者在右边输出的同时,左边输入,反之亦然
a.pop(5)
a.insert(0,1)
print a
result [1,0,0,0,0]
120
x = collections.deque(5*[0], 5)
想了解更多关于 collections.deque
的内容,可以查看 官方文档。你用的 push
方法在这个类型里其实叫 appendleft
。
第二个参数(maxlen
,表示最大长度)是在 Python 2.6 版本中新增的;如果你使用的是更早的 Python 版本,这个功能就没有了。