您的位置:首页 > 理论基础 > 数据结构算法

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

2015-05-21 18:11 288 查看
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})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: