2009-12-19 43 views
23

我想知道Python中是否存在一个类似于固定长度FIFO缓冲区的本地数据类型。例如,我想要创建一个长度为5的FIFO缓冲区,并用全零初始化。然后,它可能是这样的:固定长度FIFO的Python数据类型

[0,0,0,0,0]

然后,当我调用该对象上放功能,它会转移掉最后的零,把新值,即1,进入左侧:

[1,0,0,0,0]

如果我把一个2,它会再移位,把看起来像这样:

[2,1,0,0,0]

...和s上。新的价值在前面,最旧的一个被转移。我明白,这将很容易实现自己,但我想尽可能使用本机python数据类型。有谁知道哪种数据类型对此最好?

回答

43
x = collections.deque(5*[0], 5) 

更多有关collections.dequethe docs;您调用push的方法在该类型中实际上被称为appendleft

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

+0

谢谢。而已。 – Doughy

2

只是一个例子来这个帖子

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 

结果:

+0

为什么你使用pop而不是maxlen? –

7

你也可以使用列表

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] 
+1

-1这不推荐。为什么阅读文档http://docs.python.org/library/collections.html?highlight=collections.deque#collections.deque – toom

+3

@toom它不是不推荐,你只需要知道处罚使用列表。为了简单起见,列表很难被打败。 –