From: Raymond Hettinger Date: Sat, 20 Nov 2021 16:04:37 +0000 (-0600) Subject: bpo-45851: Avoid full sort in statistics.multimode() (#29662) X-Git-Tag: v3.11.0a3~195 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=04e03f496cf7da48ce4f545b41579d7d45f59ad2;p=thirdparty%2FPython%2Fcpython.git bpo-45851: Avoid full sort in statistics.multimode() (#29662) Suggested by Stefan Pochmann. --- diff --git a/Lib/statistics.py b/Lib/statistics.py index e67c51709136..4f3ab49b4021 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -609,9 +609,11 @@ def multimode(data): >>> multimode('') [] """ - counts = Counter(iter(data)).most_common() - maxcount, mode_items = next(groupby(counts, key=itemgetter(1)), (0, [])) - return list(map(itemgetter(0), mode_items)) + counts = Counter(iter(data)) + if not counts: + return [] + maxcount = max(counts.values()) + return [value for value, count in counts.items() if count == maxcount] # Notes on methods for computing quantiles