二、Counter类
在collections模块中有一个新的Counter类,它实际上是一个记录着一个对象出现在一个集合中的次数。
>>> import collections
>>> x = [1, 1, 2, 3, 4, 5, 4, 4, 6, 4]
>>> c = collections.Counter(x)
>>> c = collections.Counter(x)
>>> c
Counter({4: 4, 1: 2, 2: 1, 3: 1, 5: 1, 6: 1})
>>> x = [1, 1, 2, 3, 4, 5, 4, 4, 6, 4]
>>> c = collections.Counter(x)
>>> c = collections.Counter(x)
>>> c
Counter({4: 4, 1: 2, 2: 1, 3: 1, 5: 1, 6: 1})
这个类可以使用一组典型的字典方法即keys()、values()和items()来访问其内容;不过,这个类的update()方法跟常规字典的update()方法有所不同。 它可以接受序列或者值为整数的映射。如果使用的是序列,它会统计元素个数,并将其加到原先元素个数上。对于映射,它会统计该映射中的每个对象,并将结果加到原先的统计个数中。以下代码对上面的示例中已经初始化过的Counter类进行更新:
>>> c.update([3, 3, 4])
>>> c
Counter({4: 5, 3: 3, 1: 2, 2: 1, 5: 1, 6: 1})
>>> c.update({2:5})
>>> c
Counter({2: 6, 4: 5, 3: 3, 1: 2, 5: 1, 6: 1})
>>> c.update({2:5})
>>> c
Counter({2: 11, 4: 5, 3: 3, 1: 2, 5: 1, 6: 1})
>>> c
Counter({4: 5, 3: 3, 1: 2, 2: 1, 5: 1, 6: 1})
>>> c.update({2:5})
>>> c
Counter({2: 6, 4: 5, 3: 3, 1: 2, 5: 1, 6: 1})
>>> c.update({2:5})
>>> c
Counter({2: 11, 4: 5, 3: 3, 1: 2, 5: 1, 6: 1})
此Counter类还具有一些特殊方法,其中elements()方法返回所有的元素,并按照其值进行排序:
>>> list(c.elements())
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 4, 4, 4, 4, 4, 5, 6]
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 4, 4, 4, 4, 4, 5, 6]
Most_common()方法返回对象:频率对,排序方式是出现的最多的排在最前面。
>>> c.most_common()
[(2, 11), (4, 5), (3, 3), (1, 2), (5, 1), (6, 1)]
[(2, 11), (4, 5), (3, 3), (1, 2), (5, 1), (6, 1)]
如果给most_common方法传递一个整数N作为参数的话,它就会只返回出现频率最高的那个元素,举例来说,对于上例中的Counter对象,数字2出现的频率最高,所以:
>>> c.most_common(1)
[(2, 11)]
[(2, 11)]