python学习系列---collections模块
2017-08-29 10:16
471 查看
1.Counter Counter是对字典类型的补充,用于追踪值的出现次数。它具备字典的所有功能。在python的内部实现中,Counter类继承了dict类。
1.1 基本用法
>>> import collections
>>> obj = collections.Counter('I Dreamed A Dream')
>>> obj
Counter({' ': 3, 'e': 3, 'a': 2, 'D': 2, 'm': 2, 'r': 2, 'I': 1, 'A': 1, 'd': 1})
>>> Counter统计了字符串中每个字符出现的次数
>>> print type(obj)
<class 'collections.Counter'> #Counter对象的类型
In [8]: obj.most_common(3) #这个方法在python3中才有
Out[8]: [(' ', 3), ('e', 3), ('a', 2)] #获取出现次数最多的前n个字符,n为参数。
In [12]: for k,v in obj.items():
...: print k, v
...:
a 2 #与dict拥有相同的获取items的方法,keys(),values()方法也相同。
3
e 3
D 2
I 1
m 2
r 2
A 1
d 1
In [17]: obj.update(["But","The","Tigers","Come","At","Night"])
In [19]: print obj
Counter({'A': 1, 'Come': 1, 'I': 1, 'Dreamed': 1, 'Tigers': 1, 'But': 1, 'At': 1, 'Night': 1, 'The': 1, 'Dream': 1})
#可以更新Counter
In [20]: obj.subtract(["But","The","Tigers","Come","At","Night"])
In [21]: print obj
Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': 0, 'Tigers': 0, 'But': 0, 'At': 0, 'Night': 0, 'The': 0})
#减少元素
In [24]: obj.subtract(["But","The","Tigers","Come","At","Night"])
In [25]: print obj
Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': -2, 'Tigers': -2, 'But': -2, 'At': -2, 'Night': -2, 'The': -2})
#元素个数可以是负数。
2. OrderedDict
OrderedDict 是一个有序的字典类型,它同样具有字典的所有方法。
2.1 基本用法
In [26]: odic = collections.OrderedDict()
In [28]: odic['a']=1
In [29]: odic['b']=2
In [30]: odic['c']=3
In [31]: odic
Out[31]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变
In [32]: odic
Out[32]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变
In [33]: odic.setdefault('d')
In [34]: odic
Out[34]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])
#设默认值为None
In [35]: odic.setdefault('d',4)
In [36]: odic
Out[36]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])
In [37]: odic['d']=4
In [38]: odic
Out[38]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
In [42]: odic.move_to_end('a')
Out[42]: OrderedDict([('b', 2), ('c', 3), ('d', 4),('a', 1)])
#将元素移动到最后
In [43]: odic.pop('c')
Out[43]: 3 #取出指定的元素
In [44]: odic
Out[44]: OrderedDict([('a', 1), ('b', 2), ('d', 4)])
In [45]: odic.update({'e':5,'f':6})
In [46]: odic
Out[46]: OrderedDict([('a', 1), ('b', 2), ('d', 4), ('e', 5), ('f', 6)])
#更新字典
3. defaultdict
defaultdict 为字典的每个元素指定一个默认的value类型。
3.1 基本用法
In [47]: ddic = collections.defaultdict(list)
In [48]: ddic['a'].append('No')
In [49]: ddic['a'].append('Song')
In [50]: ddic['a'].append('Unsung')
In [52]: ddic
Out[52]: defaultdict(list, {'a': ['No', 'Song', 'Unsung']})
In [53]: ddic['b'].append('No')
In [54]: ddic['b'].append('Wine')
In [55]: ddic['b'].append('Untasted')
In [57]: ddic
Out[57]: defaultdict(list, {'a': ['No', 'Song', 'Unsung'], 'b': ['No', 'Wine', 'Untasted'})
4. namedtuple
namedtuple 创建一个可以通过名字进行访问其中元素的元组,它包含tuple的所有功能。使用时需要首先创建一个namedtuple类。
4.1 基本用法
有一个常用的场景就是给坐标轴上的点赋予坐标值。
In [58]: MyNamedTu = collections.namedtuple('MyNamedTu',['x','y','z'])
#创建一个类
In [59]: obj = MyNamedTu(10,20,30)
In [60]: obj
Out[60]: MyNamedTu(x=10, y=20, z=30)
In [61]: obj.x
Out[61]: 10
In [62]: obj.y
Out[62]: 20
In [63]: obj.z
Out[63]: 30
在这里,我们使用namedtuple函数创建了一个MyNamedTu类,这个类有三个属性:x,y,z. obj = MyNamedTu(10,20,30)这一句就相当于创建了一个对象,这个对象的三个属性x=10,y=20,z=30. 现在应该明白为什么同样是collections的模块,namedtuple不像collections模块里其他的功能一样直接使用一个类,而是要创建一个类了,一个原因就是我们要使用的类的属性是不确定的。
5. deque
deque 是一个线程安全的双向队列,它是python内置的队列。
5.1 基本用法
append(),appendleft(),clear(),copy(),count(),extend(),extendleft(),index(),insert(),remove(),revert(),rotate(),
In [66]: deq = collections.deque()
In [68]: deq.append(1)
In [69]: deq.appendleft(10)
In [70]: deq.appendleft(1)
In [72]: deq
Out[72]: deque([1, 10, 1])
In [73]: deq.count(1)
Out[73]: 2
In [74]: deq.extend([2,3,4])
In [75]: deq
Out[75]: deque([1, 10, 1, 2, 3, 4])
In [77]: deq.rotate()
In [78]: deq
Out[78]: deque([4, 1, 10, 1, 2, 3]) #从右边拿元素放到左边,默认为一个元素
In [79]: deq.rotate(2)
In [80]: deq
Out[80]: deque([2, 3, 4, 1, 10, 1]) #从右边拿指定个数的元素放到左边
5.Queue.Queue
Queue 是python中的一个单向队列,不是内置的,需要import.
用法略。
1.1 基本用法
>>> import collections
>>> obj = collections.Counter('I Dreamed A Dream')
>>> obj
Counter({' ': 3, 'e': 3, 'a': 2, 'D': 2, 'm': 2, 'r': 2, 'I': 1, 'A': 1, 'd': 1})
>>> Counter统计了字符串中每个字符出现的次数
>>> print type(obj)
<class 'collections.Counter'> #Counter对象的类型
In [8]: obj.most_common(3) #这个方法在python3中才有
Out[8]: [(' ', 3), ('e', 3), ('a', 2)] #获取出现次数最多的前n个字符,n为参数。
In [12]: for k,v in obj.items():
...: print k, v
...:
a 2 #与dict拥有相同的获取items的方法,keys(),values()方法也相同。
3
e 3
D 2
I 1
m 2
r 2
A 1
d 1
In [17]: obj.update(["But","The","Tigers","Come","At","Night"])
In [19]: print obj
Counter({'A': 1, 'Come': 1, 'I': 1, 'Dreamed': 1, 'Tigers': 1, 'But': 1, 'At': 1, 'Night': 1, 'The': 1, 'Dream': 1})
#可以更新Counter
In [20]: obj.subtract(["But","The","Tigers","Come","At","Night"])
In [21]: print obj
Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': 0, 'Tigers': 0, 'But': 0, 'At': 0, 'Night': 0, 'The': 0})
#减少元素
In [24]: obj.subtract(["But","The","Tigers","Come","At","Night"])
In [25]: print obj
Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': -2, 'Tigers': -2, 'But': -2, 'At': -2, 'Night': -2, 'The': -2})
#元素个数可以是负数。
2. OrderedDict
OrderedDict 是一个有序的字典类型,它同样具有字典的所有方法。
2.1 基本用法
In [26]: odic = collections.OrderedDict()
In [28]: odic['a']=1
In [29]: odic['b']=2
In [30]: odic['c']=3
In [31]: odic
Out[31]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变
In [32]: odic
Out[32]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变
In [33]: odic.setdefault('d')
In [34]: odic
Out[34]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])
#设默认值为None
In [35]: odic.setdefault('d',4)
In [36]: odic
Out[36]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])
In [37]: odic['d']=4
In [38]: odic
Out[38]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
In [42]: odic.move_to_end('a')
Out[42]: OrderedDict([('b', 2), ('c', 3), ('d', 4),('a', 1)])
#将元素移动到最后
In [43]: odic.pop('c')
Out[43]: 3 #取出指定的元素
In [44]: odic
Out[44]: OrderedDict([('a', 1), ('b', 2), ('d', 4)])
In [45]: odic.update({'e':5,'f':6})
In [46]: odic
Out[46]: OrderedDict([('a', 1), ('b', 2), ('d', 4), ('e', 5), ('f', 6)])
#更新字典
3. defaultdict
defaultdict 为字典的每个元素指定一个默认的value类型。
3.1 基本用法
In [47]: ddic = collections.defaultdict(list)
In [48]: ddic['a'].append('No')
In [49]: ddic['a'].append('Song')
In [50]: ddic['a'].append('Unsung')
In [52]: ddic
Out[52]: defaultdict(list, {'a': ['No', 'Song', 'Unsung']})
In [53]: ddic['b'].append('No')
In [54]: ddic['b'].append('Wine')
In [55]: ddic['b'].append('Untasted')
In [57]: ddic
Out[57]: defaultdict(list, {'a': ['No', 'Song', 'Unsung'], 'b': ['No', 'Wine', 'Untasted'})
4. namedtuple
namedtuple 创建一个可以通过名字进行访问其中元素的元组,它包含tuple的所有功能。使用时需要首先创建一个namedtuple类。
4.1 基本用法
有一个常用的场景就是给坐标轴上的点赋予坐标值。
In [58]: MyNamedTu = collections.namedtuple('MyNamedTu',['x','y','z'])
#创建一个类
In [59]: obj = MyNamedTu(10,20,30)
In [60]: obj
Out[60]: MyNamedTu(x=10, y=20, z=30)
In [61]: obj.x
Out[61]: 10
In [62]: obj.y
Out[62]: 20
In [63]: obj.z
Out[63]: 30
在这里,我们使用namedtuple函数创建了一个MyNamedTu类,这个类有三个属性:x,y,z. obj = MyNamedTu(10,20,30)这一句就相当于创建了一个对象,这个对象的三个属性x=10,y=20,z=30. 现在应该明白为什么同样是collections的模块,namedtuple不像collections模块里其他的功能一样直接使用一个类,而是要创建一个类了,一个原因就是我们要使用的类的属性是不确定的。
5. deque
deque 是一个线程安全的双向队列,它是python内置的队列。
5.1 基本用法
append(),appendleft(),clear(),copy(),count(),extend(),extendleft(),index(),insert(),remove(),revert(),rotate(),
In [66]: deq = collections.deque()
In [68]: deq.append(1)
In [69]: deq.appendleft(10)
In [70]: deq.appendleft(1)
In [72]: deq
Out[72]: deque([1, 10, 1])
In [73]: deq.count(1)
Out[73]: 2
In [74]: deq.extend([2,3,4])
In [75]: deq
Out[75]: deque([1, 10, 1, 2, 3, 4])
In [77]: deq.rotate()
In [78]: deq
Out[78]: deque([4, 1, 10, 1, 2, 3]) #从右边拿元素放到左边,默认为一个元素
In [79]: deq.rotate(2)
In [80]: deq
Out[80]: deque([2, 3, 4, 1, 10, 1]) #从右边拿指定个数的元素放到左边
5.Queue.Queue
Queue 是python中的一个单向队列,不是内置的,需要import.
用法略。
相关文章推荐
- python学习系列---collections模块
- Python爬虫学习系列教程
- Python系列学习笔记(一)——入门学习
- Python学习系列之内置函数
- Python爬虫学习系列教程
- 【Python学习系列十六】基于scikit-learn库逻辑回归训练模型(delta比赛代码)
- python学习系列--python内置函数(一)
- Python学习系列之文件操作
- Python Twisted 学习系列19(转载stulife最棒的Twisted入门教程)
- Python 学习系列(2)and、or用法
- 树莓派学习系列5——使用python编写简单的游戏程序
- Guibs 的 Python 学习_系列介绍
- Python学习系列(一)(基础入门)
- python学习系列之冒泡排序
- python学习系列之生成器与协程
- 【Python学习系列三】Windows下Python第三方常用库安装
- Python爬虫学习系列教程
- Python学习系列之装饰器
- Python学习系列之format用法
- 大数据学习系列----python写MapReduce