>>> pop.add_number(1)
>>> pop.add_number(10)
>>> pop.add_number(3)
+ >>> len(pop)
+ 3
>>> pop.get_median()
3
>>> pop.add_number(7)
if not self.minimum or number < self.minimum:
self.minimum = number
+ def __len__(self):
+ """Return the population size."""
+ n = 0
+ if self.highers:
+ n += len(self.highers)
+ if self.lowers:
+ n += len(self.lowers)
+ return n
+
def _rebalance(self):
if len(self.lowers) - len(self.highers) > 1:
heappush(self.highers, -heappop(self.lowers))
def get_mean(self) -> float:
"""Returns the mean (arithmetic mean) so far in O(1) time."""
- count = len(self.lowers) + len(self.highers)
+ count = len(self)
return self.aggregate / count
def get_mode(self) -> Tuple[float, int]:
"""
if n == 50:
return self.get_median()
- count = len(self.lowers) + len(self.highers)
+ count = len(self)
self._create_sorted_copy_if_needed(count)
assert self.sorted_copy
index = round(count * (n / 100.0))