Skip to content

Instantly share code, notes, and snippets.

@antonagestam
Created May 6, 2019 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save antonagestam/08264040b61a375a6bf1136d3bd9f03f to your computer and use it in GitHub Desktop.
Save antonagestam/08264040b61a375a6bf1136d3bd9f03f to your computer and use it in GitHub Desktop.
A Deque subclass that maintains a running sum of it's values
from typing import Deque, Iterable
T = float
class RunningSumDeque(Deque[T]):
def __init__(self, iterable: Iterable[T], maxlen: int):
super().__init__(iterable, maxlen)
self.__sum = sum(self)
@property
def sum(self) -> T:
return self.__sum
@property
def mean(self) -> T:
return self.__sum / len(self)
def append(self, x: T) -> None:
if len(self) == self.maxlen:
self.__sum -= self[0]
self.__sum += x
super().append(x)
def appendleft(self, x: T) -> None:
if len(self) == self.maxlen:
self.__sum -= self[-1]
self.__sum += x
super().appendleft(x)
def clear(self) -> None:
super().clear()
self.__sum = 0
def insert(self, i: int, x: T) -> None:
super().insert(i, x)
self.__sum += x
def pop(self):
value = super().pop()
self.__sum -= value
return value
def popleft(self) -> T:
value = super().popleft()
self.__sum -= value
return value
def remove(self, value):
super().remove(value)
self.__sum -= value
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment