固定长度FIFO的Python数据类型

83 投票
4 回答
70110 浏览
提问于 2025-04-15 17:11

我想知道在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 版本,这个功能就没有了。

撰写回答