2009-12-19 48 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它不是不推薦,你只需要知道處罰使用列表。爲了簡單起見,列表很難被打敗。 –