]> granicus.if.org Git - python/commitdiff
Issue #23509: Speed up Counter operators
authorRaymond Hettinger <python@rcn.com>
Sat, 30 May 2015 05:14:07 +0000 (22:14 -0700)
committerRaymond Hettinger <python@rcn.com>
Sat, 30 May 2015 05:14:07 +0000 (22:14 -0700)
(Based on patch by Serhiy Storchaka.)

Lib/collections/__init__.py

index 6794de1f8e29ce516d2436d1882a7bd7f9673e03..80dc4f6d4eed33cc0c0c0e91958ce0a0f2c5ff98 100644 (file)
@@ -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'''