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?
You can use this: [None] * 10 . But this won't be "fixed size" you can still append, remove ... This is how lists are made. You could make it a tuple ( tuple([None] * 10) ) to fix its width, but again, you won't be able to change it (not in all cases, only if the items stored are mutable).
In Python, a FIFO queue is a linear data structure. It stores objects in a first in first out (FIFO) manner. For example, you can use the Queue class from the queue module as a thread-safe FIFO queue: from queue import Queue.
A stack is a linear data structure that stores items in a Last-In/First-Out (LIFO) or First-In/Last-Out (FILO) manner. In stack, a new element is added at one end and an element is removed from that end only. The insert and delete operations are often called push and pop.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With