summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/statistics.py4
-rw-r--r--Lib/test/test_statistics.py8
-rw-r--r--Misc/NEWS3
3 files changed, 12 insertions, 3 deletions
diff --git a/Lib/statistics.py b/Lib/statistics.py
index a67a6d11cd..9359ed71e5 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -268,9 +268,7 @@ def _coerce_types(T1, T2):
def _counts(data):
# Generate a table of sorted (value, frequency) pairs.
- if data is None:
- raise TypeError('None is not iterable')
- table = collections.Counter(data).most_common()
+ table = collections.Counter(iter(data)).most_common()
if not table:
return table
# Extract the values with the highest frequency.
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index 3d30d88f69..6db821fc6e 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -1355,6 +1355,14 @@ class TestMode(NumericTestCase, AverageMixin, UnivariateTypeMixin):
# collections.Counter, which accepts None and returns an empty dict.
self.assertRaises(TypeError, self.func, None)
+ def test_counter_data(self):
+ # Test that a Counter is treated like any other iterable.
+ data = collections.Counter([1, 1, 1, 2])
+ # Since the keys of the counter are treated as data points, not the
+ # counts, this should raise.
+ self.assertRaises(statistics.StatisticsError, self.func, data)
+
+
# === Tests for variances and standard deviations ===
diff --git a/Misc/NEWS b/Misc/NEWS
index 58938e0e01..9f8f43c7cb 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,9 @@ Core and Builtins
Library
-------
+- Issue #20478: the statistics module now treats collections.Counter inputs
+ like any other iterable.
+
- Issue #17369: get_filename was raising an exception if the filename
parameter's RFC2231 encoding was broken in certain ways. This was
a regression relative to python2.