From: Raymond Hettinger Date: Tue, 26 May 2015 17:35:15 +0000 (-0700) Subject: Issue #23509: Speed up Counter operators X-Git-Tag: v3.5.0b2~13^2~36 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=944db38cb720b511aad5d7850dec71402e7e2725;p=thirdparty%2FPython%2Fcpython.git Issue #23509: Speed up Counter operators (Based on patch by Serhiy Storchaka.) --- diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index fc60e13daad0..9c22d86d7980 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -736,14 +736,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'''