Well, you could iterate over an index into the list: from __future__ import division
def moving_average(sequence, n): return [sum(sequence[i:i+n])/n for i in xrange(len(sequence)-n+1)] Of course, that's hardly efficient. You really want to use the value calculated for the i_th term in the (i+1)th term's evaluation. While it's not easy (or pretty) to store state between iterations in a list comprehension, this is the perfect use for a generator: def generator_to_list(f): return lambda *args,**keywords: list(f(*args,**keywords)) @generator_to_list def moving_average(sequence, n): assert len(sequence) >= n and n > 0 average = sum(sequence[:n]) / n yield average for i in xrange(1, len(sequence)-n+1): average += (sequence[i+n-1] - sequence[i-1]) / n yield average -- http://mail.python.org/mailman/listinfo/python-list