From 4c97a62ae34a0e892755a8f95ae6e11881d6feb3 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 29 May 2015 22:14:07 -0700 Subject: [PATCH] Issue #23509: Speed up Counter operators (Based on patch by Serhiy Storchaka.) --- Lib/collections/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 6794de1f8e..80dc4f6d4e 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -753,14 +753,22 @@ class Counter(dict): def __pos__(self): 'Adds an empty counter, effectively stripping negative and zero counts' - return self + Counter() + result = Counter() + for elem, count in self.items(): + if count > 0: + result[elem] = count + return result def __neg__(self): '''Subtracts from an empty counter. Strips positive and zero counts, and flips the sign on negative counts. ''' - return Counter() - self + result = Counter() + for elem, count in self.items(): + if count < 0: + result[elem] = 0 - count + return result def _keep_positive(self): '''Internal method to strip elements with a negative or zero count''' -- 2.40.0