技术开发 频道

详解Python 3.1的新变化之标准程序库篇

  二、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})

  这个类可以使用一组典型的字典方法即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})

  此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]

  Most_common()方法返回对象:频率对,排序方式是出现的最多的排在最前面。

  >>> c.most_common()

  [(
2, 11), (4, 5), (3, 3), (1, 2), (5, 1), (6, 1)]

  如果给most_common方法传递一个整数N作为参数的话,它就会只返回出现频率最高的那个元素,举例来说,对于上例中的Counter对象,数字2出现的频率最高,所以:

  >>> c.most_common(1)

  [(
2, 11)]
0
相关文章