2009-12-19 8 views
23

Ich würde gerne wissen, ob es in Python einen nativen Datentyp gibt, der sich wie ein FIFO-Puffer fester Länge verhält. Ich möchte zum Beispiel einen FIFO-Puffer der Länge 5 erstellen, der nur mit Nullen initialisiert wird. Dann könnte es so aussehen:Python-Datentyp für ein FIFO mit fester Länge

[0,0,0,0,0]

Dann, wenn ich die Put-Funktion für das Objekt aufrufen, wird es die letzte Null und setzen Sie die neue Verschiebung weg Wert, sagen wir 1, in die linke Seite:

[1,0,0,0,0]

Wenn ich ein 2 setzen, wäre es dann so aussehen verschieben und setzen:

[2,1,0,0,0]

... und s o auf. Der neue Wert wird vorne und der älteste Wert wird verschoben. Ich verstehe, dass dies sehr einfach zu implementieren wäre, aber ich würde gerne native Python-Datentypen verwenden, wenn überhaupt möglich. Weiß jemand, welcher Datentyp dafür am besten ist?

Antwort

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

Siehe the docs für mehr über collections.deque; Die Methode, die Sie push aufrufen, heißt in diesem Typ eigentlich appendleft.

Der zweite Parameter (maxlen, der die maximalen Längen angibt) wurde in Python 2.6 hinzugefügt; Wenn Sie ältere Versionen von Python verwenden, ist es nicht verfügbar.

+0

Danke. Das ist es. – Doughy

2

nur ein weiteres Beispiel zu diesem Beitrag

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 

Ergebnis:

+0

Warum verwenden Sie Pop und nicht Maxlen? –

7

Sie auch Liste

a = [0,0,0,0,0] 

a.pop(0) 
a.append(1) 

print a 
result [0,0,0,0,1] 

oder für die linke Seite in der rechten heraus verwenden können, sonst

a.pop(5) 
a.insert(0,1) 
print a 
result [1,0,0,0,0] 
+1

-1 Dies wird nicht empfohlen. Aus dem Grund, warum lesen Sie die Dokumente http://docs.python.org/library/collections.html?highlight=collections.deque#collections.deque – toom

+3

@toom es ist nicht empfehlenswert, Sie müssen nur die Strafe beachten Verwenden von Listen. Der Einfachheit halber ist eine Liste schwer zu schlagen. –

Verwandte Themen