Python标准库(2)——数据结构之Counter

来源:互联网 发布:手机怎么注销淘宝账号 编辑:程序博客网 时间:2024/06/05 03:47
2. 数据结构
Python内置了基本的数据结构类型,如list,tuple,dict,set。除此之外,标准库还提供了很多功能强大的,且经过良好测试的数据结构
collections模块包含了几种常见的数据结构。Deque是一个双端队列,可以快速地在队列两端插入和删除元素。defaultdict扩展了dict
,当访问的key不存在时,返回一个默认值,而不是抛出异常。OrderedDict会记住元素加入进来的顺序


2.1 collections 包含容器数据类型
2.1.1 Counter Counter容器可以记录一个相同的值被添加了多少次
初始化 Counter支持三种形式的初始化。
使用序列进行初始化:
>>> import collections
>>> print collections.Counter(['a', 'b', 'c', 'b', 'c', 'b'])
Counter({'b': 3, 'c': 2, 'a': 1})


使用字典初始化:
>>> print collections.Counter({'a':2, 'b':3, 'c':4})
Counter({'c': 4, 'b': 3, 'a': 2})


使用关键字参数初始化:
>>> print collections.Counter(a=2, b=3, c=4)
Counter({'c': 4, 'b': 3, 'a': 2})


也可以使用无参数的构造方法来生成Counter,然后使用update()方法来填充数据
>>> c = collections.Counter()
>>> c.update('abcdaab')
>>> print c
Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})
>>> c.update({'a':1, 'd':5})
>>> print c
Counter({'d': 6, 'a': 4, 'b': 2, 'c': 1})


Counter填充数据以后,就可以使用dict的方法来获取统计值
>>> c = collections.Counter('abcdaab')
>>> for ch in 'abcde':
...     print '%s : %d' % (ch, c[ch])
...
a : 3
b : 2
c : 1
d : 1
e : 0


elements()方法返回一个iterator,包含了所有的数据值
>>> c = collections.Counter('abcdaab')
>>> c['e'] = 0
>>> print c
Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1, 'e': 0})
>>> print list(c.elements())
['a', 'a', 'a', 'c', 'b', 'b', 'd']
另外,从输出可以看出,出现次数为0的值不显示;并且显示顺序是不固定的




most_common(n)方法返回出现次数最大的n个
>>> c = collections.Counter('abcdaabadjfladkfjadlkfjasldkfjasldfkajdlfakdadf')
>>> for letter, count in c.most_common(3):
...     print '%s : %d' % (letter, count)
...
a : 11
d : 9
f : 7
可见,出现次数最多的是a11次;其次是d9次,第三是f7次


算数运算
Counter可以做加法,减法,以及集合形式的交集和并集
>>> c1 = collections.Counter('abcdefg')
>>> c2 = collections.Counter('abcdefg')
>>> print c1 + c2
Counter({'a': 2, 'c': 2, 'b': 2, 'e': 2, 'd': 2, 'g': 2, 'f': 2})
>>> print c1 - c2
Counter()
>>> print c1 & c2
Counter({'a': 1, 'c': 1, 'b': 1, 'e': 1, 'd': 1, 'g': 1, 'f': 1})
>>> print c1 | c2
Counter({'a': 1, 'c': 1, 'b': 1, 'e': 1, 'd': 1, 'g': 1, 'f': 1})
0 0
原创粉丝点击