【发布时间】:2013-07-28 00:45:21
【问题描述】:
我想知道 Python 计数器中有多少项,包括重复项。我试过len,它告诉我唯一项目的数量:
>>> c = Counter(x=3,y=7)
>>> len(c)
2
我拥有的最好的是sum(c.itervalues()),我认为这并不可怕,但我希望 Counter 对象缓存该值,以便我可以在 O(1) 中访问它。
【问题讨论】:
我想知道 Python 计数器中有多少项,包括重复项。我试过len,它告诉我唯一项目的数量:
>>> c = Counter(x=3,y=7)
>>> len(c)
2
我拥有的最好的是sum(c.itervalues()),我认为这并不可怕,但我希望 Counter 对象缓存该值,以便我可以在 O(1) 中访问它。
【问题讨论】:
Counter docs 将您的sum(c.itervalues()) 答案作为“使用 Counter 对象的常用模式”部分中的标准模式,所以我怀疑还有什么更好的。
与字典中的其他 iter* 方法一样,在 Python 3 中,itervalues 被 values 替换。
【讨论】:
你可以浏览the source code; Counter 中没有记录项目数的缓存值。所以你能做的最好的就是sum(c.itervalues())。
In [108]: import collections
In [109]: c = collections.Counter(x=3, y=7)
In [110]: sum(c.itervalues())
Out[110]: 10
【讨论】:
sum(c.values())