I would like to know if there is a native datatype in Python that acts like a fixed-length FIFO buffer. For example, I want do create a length-5 FIFO buffer that is initialized with all zeros. Then, it might look like this:
[0,0,0,0,0]
Then, when I call the put function on the object, it will shift off the last zero and put the new value, say 1, into the left side:
[1,0,0,0,0]
If I put a 2, it would then shift and put to look like this:
[2,1,0,0,0]
…and so on. The new value goes at the front and the oldest one is shifted off. I understand that this would be very easy to implement myself, but I would like to use native python datatypes if at all possible. Does anyone know which datatype would be best for this?
Advertisement
Answer
x = collections.deque(5*[0], 5)
See the docs for more about collections.deque
; the method you call push
is actually called appendleft
in that type.
The second parameter (maxlen
, giving the maximum lengths) was added in Python 2.6; if you’re using older versions of Python, it won’t be available.