用于固定长度 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 数据类型。有人知道哪种数据类型最适合这种情况吗?

59833 次浏览
x = collections.deque(5*[0], 5)

有关 collections.deque的更多信息,请参见 那些文件; 在该类型中,调用 push的方法实际上称为 appendleft

第二个参数(maxlen,给出最大长度)是在 Python 2.6中添加的; 如果您使用的是旧版本的 Python,那么它将不可用。

这篇文章只是再举一个例子

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'])

你也可以使用 list

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]

test_queue = deque([0]*5,maxlen=5)


for i in range(10):
print(i)
test_queue.appendleft(i)
print(list(test_queue))

印刷品:

[0, 0, 0, 0, 0]
1
[1, 0, 0, 0, 0]
2
[2, 1, 0, 0, 0]
3
[3, 2, 1, 0, 0]
4
[4, 3, 2, 1, 0]
5
[5, 4, 3, 2, 1]
6
[6, 5, 4, 3, 2]
7
[7, 6, 5, 4, 3]
8
[8, 7, 6, 5, 4]
9
[9, 8, 7, 6, 5]