[Python-ideas] collections.Counter should implement __mul__, __rmul__

Franklin? Lee leewangzhong+python at gmail.com
Sun Apr 22 18:53:59 EDT 2018


Instead of extending Counter to fit fancier usecases, why not have a
new class that is designed for arithmetic?

I, for one, would love Numpy-style list and dict classes in the
standard library. And they wouldn't be confusingly called Counter, and
have strange behaviors with negative values.

I only saw discussion about whether or not we want Counter to support
Peter's use, but there isn't much talk of supporting it with a new
class. If we can get behind a new class, there wouldn't be as much
conflict about what to do with the old one.

On Sun, Apr 15, 2018 at 5:05 PM, Peter Norvig <peter at norvig.com> wrote:
> For most types that implement __add__, `x + x` is equal to `2 * x`.
>
> That is true for all numbers, list, tuple, str, timedelta, etc. -- but not
> for collections.Counter. I can add two Counters, but I can't multiply one by
> a scalar. That seems like an oversight.
>
> It would be worthwhile to implement multiplication because, among other
> reasons, Counters are a nice representation for discrete probability
> distributions, for which multiplication is an even more fundamental
> operation than addition.
>
> Here's an implementation:
>
>     def __mul__(self, scalar):
>         "Multiply each entry by a scalar."
>         result = Counter()
>         for key in self:
>             result[key] = self[key] * scalar
>         return result
>
>     def __rmul__(self, scalar):
>         "Multiply each entry by a scalar."
>         result = Counter()
>         for key in self:
>             result[key] = scalar * self[key]
>         return result
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>


More information about the Python-ideas mailing list