RosettaCodeData/Task/Averages-Simple-moving-average/Python/averages-simple-moving-average-2.py
2013-04-10 14:58:50 -07:00

21 lines
619 B
Python

from collections import deque
class Simplemovingaverage():
def __init__(self, period):
assert period == int(period) and period > 0, "Period must be an integer >0"
self.period = period
self.stream = deque()
def __call__(self, n):
stream = self.stream
stream.append(n) # appends on the right
streamlength = len(stream)
if streamlength > self.period:
stream.popleft()
streamlength -= 1
if streamlength == 0:
average = 0
else:
average = sum( stream ) / streamlength
return average