Issue #23509: Speed up Counter operators

(Based on patch by Serhiy Storchaka.)
This commit is contained in:
Raymond Hettinger 2015-05-29 22:14:07 -07:00
parent 3d1151d2c0
commit 4c97a62ae3
1 changed files with 10 additions and 2 deletions

View 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'''