Python Datatype for a fixed-length FIFO
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开发者_如何学Python 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?
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.
you can also use list
a = [0,0,0,0,0]
a.pop(0)
a.append(1)
print a
result [0,0,0,0,1]
or for left side in right out, otherwise
a.pop(5)
a.insert(0,1)
print a
result [1,0,0,0,0]
Just one more example to this post
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
result:
deque(['new.com', '1.com', '2.com'])
test_queue = deque([0]*5,maxlen=5)
for i in range(10):
print(i)
test_queue.appendleft(i)
print(list(test_queue))
prints:
[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]
精彩评论