summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2014-02-08 19:44:16 +1000
committerNick Coghlan <ncoghlan@gmail.com>2014-02-08 19:44:16 +1000
commitbfd68bf4ac6661bf0fab51178583bee88840a8e6 (patch)
tree25150831444976e4c64ac363fee3645861612d90
parentec1c8097c18c5fadaf74ff25c9bc88bf661e3222 (diff)
downloadcpython-git-bfd68bf4ac6661bf0fab51178583bee88840a8e6.tar.gz
Issue #20478: avoid special casing Counter in statistics
Passing Counter objects to the Counter constructor is special cased, going through iter() firsts ensures they are handled the same way as any other iterable. (Committing on Steven's behalf as I don't believe his SSH key is registered yet)
-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.