Commit 4c97a62a authored by Raymond Hettinger's avatar Raymond Hettinger

Issue #23509: Speed up Counter operators

(Based on patch by Serhiy Storchaka.)
parent 3d1151d2
...@@ -753,14 +753,22 @@ class Counter(dict): ...@@ -753,14 +753,22 @@ class Counter(dict):
def __pos__(self): def __pos__(self):
'Adds an empty counter, effectively stripping negative and zero counts' '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): def __neg__(self):
'''Subtracts from an empty counter. Strips positive and zero counts, '''Subtracts from an empty counter. Strips positive and zero counts,
and flips the sign on negative 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): def _keep_positive(self):
'''Internal method to strip elements with a negative or zero count''' '''Internal method to strip elements with a negative or zero count'''
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment