Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:
>> def fmean(seq: Sequence[float]) -> float: >> return math.fsum(seq) / len(seq) > > Is it intentional that this doesn't support iterators? Since we need both the sum and the length, this seemed like a good starting point. Also, the existing mean() function already covers the more general cases. I suspect that it is common to keep the data in memory so that more than one descriptive statistic can be generated: data = load_measurements() data.sort() n = len(data) mu = fastmean(data) sigma = stdev(data, xbar=mu) low, q1, q2, q3, high = data[0], data[n//4], data[n//2], data[3*n//4], data[-1] popular = mode(data, first_tie=True) It's possible (though possibly not desirable) to provide an fallback path: def fastmean(data: Iterable) -> float: try: return fsum(data) / len(data) except TypeError: # Slow alternative return float(mean(data)) # Memory intensive alternative data = list(data) return fsum(data) / len(data) # Less accurate alternative total = n = 0 for n, x in enumerate(data, start=1): total += x return total / n ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35904> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com