Python空计数器比较

sim*_*ack 2 python

有谁知道为什么以下False不是True?计数器不应该与多集合类似吗?欢迎任何对文档的引用.

Counter()==Counter({'a': 0})
Run Code Online (Sandbox Code Playgroud)

int*_*jay 5

虽然Counter可用于对多重集建模,在这种情况下您可能期望两个值相等,但文档

多重集方法仅针对具有正值的用例而设计。输入可以是负值或零,但仅创建正值的输出。

由于您使用了零计数,因此它不再完全像多重集一样工作。由于Counter是 的子类dictCounter()并且Counter({'a': 0})将被视为不同。


Mar*_*ers 5

Counter文档:

注意:计数器主要用于处理正整数以表示运行计数; 但是,注意不要不必要地排除需要其他类型或负值的用例.

因此,它们并不完全像多组; 它们明确支持超出正整数的值,任何设置的键0仍被视为数据点.

您可以通过减去空Counter对象显式删除0或0以下的任何计数器:

>>> from collections import Counter
>>> Counter({'a': 0}) - Counter()
Counter()
>>> Counter({'a': 0, 'b': 1, 'c': -1}) - Counter()
Counter({'b': 1})
Run Code Online (Sandbox Code Playgroud)

  • `Counter({'a': 0, 'b': 1}) - Counter()` 很酷但也不直观。(这不是对您的回答的批评。) (2认同)