22 lines
619 B
Python
22 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
|