[Python-checkins] bpo-45851: Avoid full sort in statistics.multimode() (#29662)

rhettinger webhook-mailer at python.org
Sat Nov 20 11:04:45 EST 2021


https://github.com/python/cpython/commit/04e03f496cf7da48ce4f545b41579d7d45f59ad2
commit: 04e03f496cf7da48ce4f545b41579d7d45f59ad2
branch: main
author: Raymond Hettinger <rhettinger at users.noreply.github.com>
committer: rhettinger <rhettinger at users.noreply.github.com>
date: 2021-11-20T10:04:37-06:00
summary:

bpo-45851: Avoid full sort in statistics.multimode() (#29662)

Suggested by Stefan Pochmann.

files:
M Lib/statistics.py

diff --git a/Lib/statistics.py b/Lib/statistics.py
index e67c51709136a..4f3ab49b40219 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



More information about the Python-checkins mailing list