见下文,为什么+=
在我原来的计数器中执行吹走一个键?
>>> c = Counter({'a': 0, 'b': 0, 'c': 0})
>>> c.items()
[('a', 0), ('c', 0), ('b', 0)]
>>> c += Counter('abba')
>>> c.items()
[('a', 2), ('b', 2)]
我认为这至少可以说是不礼貌的,“X 被计算为 0 次”和“我们甚至没有计算 Xs”之间存在很大差异。看起来collections.Counter
根本不是一个计数器,它更像是一个多组。
但是计数器是 dict 的子类,我们可以用零值或负值构造它们Counter(a=0, b=-1)
:如果它实际上是一个“一袋东西”,这不是被禁止的吗,限制 init 接受一个可哈希项目的迭代?
为了进一步混淆问题,计数器实现update
和方法对和操作员subtract
具有不同的行为。看来这个班级有身份危机!+
-
Counter 是字典还是袋子?