python之计数统计

前言:

计数统计,简单的说就是统计某一项出现的次数。实际应用中很多需求都需要用到这个模型,如检测样本中某一值出现的次数、日志分析某一消息出现的频率、分析文件中相同字符串出现的概率等等。以下是实现的不同方式。

实现方式:

  • 使用dict
 1 >>> data = ['a','2',2,4,5,'2','b',4,7,'a',5,'d','a','z']
 2 >>> count_1 = dict()
 3 >>> for item in data:
 4 ...     if item in count_1:
 5 ...             count_1[item] +=1
 6 ...     else:
 7 ...             count_1[item] = 1
 8 ...
 9 >>> print count_1
10 {'a': 3, 2: 1, 'b': 1, 4: 2, 5: 2, 7: 1, '2': 2, 'z': 1, 'd': 1}
  • 使用set和list
1 >>> data
2 ['a', '2', 2, 4, 5, '2', 'b', 4, 7, 'a', 5, 'd', 'a', 'z']
3 >>> count_set = set(data)
4 >>> count_list = []
5 >>> for item in count_set:
6 ...     count_list.append({item:data.count(item)})
7 ...
8 >>> print count_list
9 [{'a': 3}, {2: 1}, {'b': 1}, {4: 2}, {5: 2}, {7: 1}, {'2': 2}, {'z': 1}, {'d': 1}]
  • 使用collections.Counter
 1 >>> data
 2 ['a', '2', 2, 4, 5, '2', 'b', 4, 7, 'a', 5, 'd', 'a', 'z']
 3 >>> from collections import Counter
 4 >>> print Counter(data)
 5 Counter({'a': 3, 4: 2, 5: 2, '2': 2, 2: 1, 'b': 1, 7: 1, 'z': 1, 'd': 1})
 6 >>>
 7 >>> list(Counter(data).elements())  #使用elements()方法获取Counter中的key值
 8 ['a', 'a', 'a', 2, 'b', 4, 4, 5, 5, 7, '2', '2', 'z', 'd']
 9 >>>
10 >>> Counter(data).most_common(2)  #使用most_common()方法可以找出前N个出现频率最高的元素以及它们对应的次数
11 [('a', 3), (4, 2)]
12 >>>
13 >>> (Counter(data))['y']  #当访问不存在的元素时,默认返回为0而不是抛出KeyError异常
14 0

Counter其他方法:

 1 >>> c=Counter("success")
 2 >>> print c
 3 Counter({'s': 3, 'c': 2, 'e': 1, 'u': 1})
 4 >>>
 5 >>> c.update("successful")  #update()方法用于被统计对象元素的更新,原有Counter计数器对象与新增元素的统计计数值相加
 6 >>> print c
 7 Counter({'s': 6, 'c': 4, 'u': 3, 'e': 2, 'f': 1, 'l': 1})
 8 >>>
 9 >>> c.subtract("successful")  #subtract()方法用于实现计数器对象中元素统计值相减,输入和输出的统计值允许为0或者负数
10 >>> print c
11 Counter({'s': 3, 'c': 2, 'e': 1, 'u': 1, 'f': 0, 'l': 0})