python之collections模块Counter类使用学习

来源:互联网 发布:python 安装xpath 编辑:程序博客网 时间:2024/05/16 00:57

    今天在实验室看了一下午的朴素贝叶斯的基本理论,不得不说之前的我对很多理论的学习态度是不求甚解,这就导致了今天下午看深入的时候很是费劲,无奈中途只好停歇了,然后拿了一个具体的实例来学习这种随处可见的贝叶斯思想,不得不说,现实生活中只要是牵涉到概率的地方就都可以使用到Bayes理论来解决事情,今天学习的实例是朴素贝叶斯纠正错误拼写问题 ,当然这篇文章的目的不是说为了讲解这个理论,在前面的博客里转载了那个学习的文章,写得很不错,浅显易懂,今天主要是学习了一下在错误拼写纠正模型中使用到的python中的一个类Counter,这个类是python内置模块collections中的一个类,可以说很好用,最常用的功能莫过于在一个容器包括:列表、字典、字符串等中计算元素重复的次数,好了,别的就不多说了,直接看测试代码即可,需要补充的在代码中都已经给出来了说明,还是很好理解的,下面是代码:

#!/usr/bin/env python#encoding:utf-8'''功能:测试使用python内置模块collections查了一些collections的资料如下:官方文档:http://docs.python.org/2/library/collections.htmlcollections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:deque:双向队列。引入自2.4。defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。OrderedDict类:排序字典,是字典的子类。引入自2.7。Counter类:为hashable对象计数,是字典的子类。引入自2.7。Antuor:沂水寒城'''from collections import Counterdef collections_test():    #Counter类    #是一个无序容器,存储元素形式为:key-value,key代表元素,value代表元素的出现频数    string='we are family and we love peace.We have the Greatwall and the yellow river!'    str_dict={'A':2,'B':5,'G':7,'E':90,'M':6,'N':6, 'x':20,'z':30}    cou0 = Counter()#创建出来一个空的Counter类    print cou0    cou1 = Counter(string)#以字符串形式创建Counter类    print 'cou1 为:------>', cou1    cou2 = Counter(str_dict)#以字典形式创建Counter类    print 'cou2 为:------>', cou2    cou3 = Counter(A=1, B=2, x=23, y=34, z=45, o=-5, m=0)#以类字典形式创建即使用键值组合直接创建    print 'cou3 为:------>', cou3    print 'cou3中所有元素计数总数为:'    print sum(cou3.values())    print '将cou3中的键转为列表为:'    print list(cou3)    print '将cou3中的键转为集合为:'    print set(cou3)    print '将cou3中的键转为列表为:'    print dict(cou3)    print '将cou3中的键值转为(elem, count)形式为:'    print cou3.items()    print '取出计数值最小的前4个元素:'    print cou2.most_common()[:-4:-1]    cou1.update('balabalabalabalabala')#增加    print 'b 的值为------>', cou1['b']    print 'a 的值为------>', cou1['a']    cou2.subtract('AA')#这样导致‘A’的值为0但是并不是删除了key值    cou2.subtract('MMMMMMMMMM')#这样的话‘M’的值就是负数了    print 'A 的值为------>', cou2['A']    print 'M 的值为------>', cou2['M']    print 'cou2 为:------>', cou2    #上面A并没有被删除,删除需要使用del方法    del cou2['A']    print 'cou2 为:------>', cou2#这里就没有A的key值了    #elements()方法    #返回元素重复次数大于等于1的元素    print list(cou3.elements())    #一般的运算操作也是满足的    print 'cou2 和 cou3之和为:'    print cou2+cou3    print 'cou2 和 cou3并集为:'    print cou2| cou3    print 'cou2 和 cou3差集为:'    print cou2 & cou3    print 'cou2 和 cou3之差为:'    print cou2 - cou3collections_test()

下面是结果:

Counter()
cou1 为:------> Counter({' ': 13, 'e': 13, 'a': 8, 'l': 6, 'r': 4, 'w': 4, 'h': 3, 't': 3, 'v': 3, 'd': 2, 'i': 2, 'o': 2, 'n': 2, 'y': 2, '!': 1, '.': 1, 'G': 1, 'W': 1, 'c': 1, 'f': 1, 'm': 1, 'p': 1})
cou2 为:------> Counter({'E': 90, 'z': 30, 'x': 20, 'G': 7, 'M': 6, 'N': 6, 'B': 5, 'A': 2})
cou3 为:------> Counter({'z': 45, 'y': 34, 'x': 23, 'B': 2, 'A': 1, 'm': 0, 'o': -5})
cou3中所有元素计数总数为:
100
将cou3中的键转为列表为:
['A', 'B', 'y', 'x', 'z', 'm', 'o']
将cou3中的键转为集合为:
set(['A', 'B', 'm', 'o', 'y', 'x', 'z'])
将cou3中的键转为列表为:
{'A': 1, 'B': 2, 'y': 34, 'x': 23, 'z': 45, 'm': 0, 'o': -5}
将cou3中的键值转为(elem, count)形式为:
[('A', 1), ('B', 2), ('y', 34), ('x', 23), ('z', 45), ('m', 0), ('o', -5)]
取出计数值最小的前4个元素:
[('A', 2), ('B', 5), ('N', 6)]
b 的值为------> 5
a 的值为------> 18
A 的值为------> 0
M 的值为------> -4
cou2 为:------> Counter({'E': 90, 'z': 30, 'x': 20, 'G': 7, 'N': 6, 'B': 5, 'A': 0, 'M': -4})
cou2 为:------> Counter({'E': 90, 'z': 30, 'x': 20, 'G': 7, 'N': 6, 'B': 5, 'M': -4})
['A', 'B', 'B', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']
cou2 和 cou3之和为:
Counter({'E': 90, 'z': 75, 'x': 43, 'y': 34, 'B': 7, 'G': 7, 'N': 6, 'A': 1})
cou2 和 cou3并集为:
Counter({'E': 90, 'z': 45, 'y': 34, 'x': 23, 'G': 7, 'N': 6, 'B': 5, 'A': 1})
cou2 和 cou3差集为:
Counter({'z': 30, 'x': 20, 'B': 2})
cou2 和 cou3之差为:
Counter({'E': 90, 'G': 7, 'N': 6, 'o': 5, 'B': 3})

0 0
原创粉丝点击