高端网站制作报价,手机制作音乐的软件app,北京微网站建设设计服务公司,网站加ico图标计数统计就是统计某一项出现的次数。实际应用中很多需求需要用到这个模型。比如测试样本中某一指出现的次数、日志分析中某一消息出现的频率等等‘这种类似的需求有很多实现方法。下面就列举几条。
(1)使用dict
看下面代码#codingutf-8
data [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4…计数统计就是统计某一项出现的次数。实际应用中很多需求需要用到这个模型。比如测试样本中某一指出现的次数、日志分析中某一消息出现的频率等等‘这种类似的需求有很多实现方法。下面就列举几条。
(1)使用dict
看下面代码#codingutf-8
data [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
count_frq dict()
for one in data:
if one in count_frq:
count_frq[one] 1
else:
count_frq[one] 1
print count_frq
输出结果如下
{‘a‘: 3, 2: 1, ‘b‘: 1, 4: 2, 5: 2, 7: 1, ‘2‘: 2, ‘z‘: 1, ‘d‘: 1}
这种方法最简单也是最容易想到的鄙人这写这篇博文之前用的最多不过以后应该不会用来我们应该使代码更加Pythonic
(2)使用set和list
代码如下#codingutf-8
data [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
data_set set(data)
count_list []
for one in data_set:
count_list.append((one,data.count(one)))
print count_list
输出结果如下
[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]
这里面利用了list的通用方法和集合(set)的特性集合是一个无序不重复的元素集而工厂函数set()可以将列表转换为一个无序不重复的元素集合。
以上方法都很简单但不够Pythonic。下面来介绍collections中的Counter类。
(一)Counter类
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型以字典的键值对形式存储其中元素作为key其计数作为value。计数值可以是任意的Interger包括0和负数支持集合操作、-、、|其中、|操作分别返回两个Counter对象各元素的最大值和最小值。
1Counter的初始化
跟平时自定义类的初始化方法差不多如下
c Counter(hello world)#可迭代对象创建
c Counter(h1,l3,o2)#关键字创建
c Counter({‘h‘:1,‘l‘:3,‘o‘:2})#字典创建
c Counter()#空Counter类
(2)Counter类常见方法
elements()返回一个迭代器。元素被重复了多少次在该迭代器中就包含多少个该元素。所有元素按照字母序排序个数小于1的元素不被包含。
update()用于统计对象元素的更新原有的Counter计数器对象与新增元素的统计计数值相加而不是直接替换。
subtract()该方法用于计数器对象中元素统计值减少输入输出的统计值书可以为0或者负数的。
most_common([n])可以查找出前n个出现频率最高的元素以及它们对于的次数也就是说频率搞的排在最前面。
所以上面的例子用Counter类的话也很简单代码如下#codingutf-8
from collections import Counter
data [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
c Counter(data)
print c
输出结果如下
Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘z‘: 1, ‘d‘: 1})
咱们接着看代码print c.elements()
print list(c.elements())
输出结果如下[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘z‘, ‘d‘]c[‘z‘] - 1
print c
print c.elements()
print list(c.elements())
输出结果如下
Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘d‘]
元素’z‘的统计值变为了0然后进行elements()运算后‘z‘就被排除掉了。c.update(aaaa)
print c
输出结果
Counter({‘a‘: 7, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})
update()在原基础上增加了计数值c.subtract(aaaaa)
print c
输出结果如下
Counter({‘a‘: 2, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})
subtract()在原基础上减少计数值print c.most_common()
输出结果如下
[(‘a‘, 2), (4, 2), (5, 2), (‘2‘, 2), (2, 1), (‘b‘, 1), (7, 1), (‘d‘, 1), (‘z‘, 0)]
以上代码都是连接在一起的。
(3)算术和集合操作#codingutf-8
from collections import Counter
data [‘a‘,‘2‘,‘2‘,‘b‘,‘a‘,‘d‘,‘a‘,]
c Counter(data)
b Counter(a1,b2)
print c
print b
print bc # c[x] d[x]
print c-b # subtract只保留正数计数的元素
print cb # 交集: min(c[x], d[x])
print c|b # 并集: max(c[x], d[x])
输出结果如下
Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 1, ‘d‘: 1})
Counter({‘b‘: 2, ‘a‘: 1})
Counter({‘a‘: 4, ‘b‘: 3, ‘2‘: 2, ‘d‘: 1})
Counter({‘a‘: 2, ‘2‘: 2, ‘d‘: 1})
Counter({‘a‘: 1, ‘b‘: 1})
Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 2, ‘d‘: 1})
(4)其它
Counter类返回值跟字典很类似所以字典类的方法对Counter对象也适用。如下#codingutf-8
from collections import Counter
data [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
c Counter(data)
print c.keys()
print c.has_key(‘a‘)
print c.get(‘a‘)
print c.items()
print c.values()
print c.viewitems()
print c.viewkeys()
输出如下
[‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘]
True
3
[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]
[3, 1, 1, 2, 2, 1, 2, 1, 1]
dict_items([(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)])
dict_keys([‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘])
这只是其中一部分其它的方法可以参考字典类的方法。
另外Counter对象还支持工厂函数操作set()、list()、dict().
有时间再补充介绍collections模块中其它的类
原文地址http://11026142.blog.51cto.com/11016142/1851791