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