[SciPy-user] array like circular buffer?

Bill Dandreta wjdandreta at att.net
Thu Oct 27 18:22:21 EDT 2005


John Hunter wrote:

>    John> I would like to have a fixed size array like data structure
>    John> that has circular buffer semantics.  Eg, when empty you can
>    John> call a "put" method that starts in the beginning and fills
>    John> the sucker up, and when you overflow the end it starts
>    John> pushing the data from the 0 index off the stack -- FIFO.
>    John> Ideally, it would support slicing and friends.
>
>    skip> How about subclassing list and proving relevant methods that
>    skip> adjusted all indices by modulo the list length?
>
>I was hoping/guessing someone had already done it for me <win
>
I think it is called a circular queue, here is a generator version:


 >>> def circularQueue(X):
...   while True:
...     x=X.pop(0)
...     X.append(x)
...     yield x
...
 >>>

 >>> X=['a','b','c']
 >>> for x in circularQueue(X):
 >>> i=0 ...   print x,X
 ...   i+=1
 ...   if i>9:break
 ...
 a ['b', 'c', 'a']
 b ['c', 'a', 'b']
 c ['a', 'b', 'c']
 a ['b', 'c', 'a']
 b ['c', 'a', 'b']
 c ['a', 'b', 'c']
 a ['b', 'c', 'a']
 b ['c', 'a', 'b']
 c ['a', 'b', 'c']
 a ['b', 'c', 'a']
 >>>

Bill




More information about the SciPy-User mailing list