]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45851: Avoid full sort in statistics.multimode() (#29662)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sat, 20 Nov 2021 16:04:37 +0000 (10:04 -0600)
committerGitHub <noreply@github.com>
Sat, 20 Nov 2021 16:04:37 +0000 (10:04 -0600)
Suggested by Stefan Pochmann.

Lib/statistics.py

index e67c51709136a16eec9164db2306eae69e4dd5ae..4f3ab49b4021933157cb602c105b3707d3af3da3 100644 (file)
@@ -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