efficient circular buffer?
Question: I want to create an efficient [circular
buffer](http://en.wikipedia.org/wiki/Circular_buffer) in python (with the goal
of taking averages of the integer values in the buffer).

Is this an efficient way to use a list to collect values?

    
    
    def add_to_buffer( self, num ):
        self.mylist.pop( 0 )
        self.mylist.append( num )
    

What would be more efficient (and why)?


Answer: I would use
[`collections.deque`](http://docs.python.org/library/collections.html#collections.deque)
with a `maxlen` arg

    
    
    >>> import collections
    >>> d = collections.deque(maxlen=10)
    >>> d
    deque([], maxlen=10)
    >>> for i in xrange(20):
    ...     d.append(i)
    ... 
    >>> d
    deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19], maxlen=10)
    

There is a [recipe](http://docs.python.org/library/collections.html#deque-
recipes) in the docs for `deque` that is similar to what you want. My
assertion that it's the most efficient rests entirely on the fact that it's
implemented in C by an incredibly skilled crew that is in the habit of
cranking out top notch code.

