collections模块是python2.7.3之后新加的功能。
查看collections模块中某个方法的使用说明
>>> import collections >>> help(collections) >>> help(collections.Counter)
1.1、计数器(Counter)
功能:Counter是对字典类型的补充,用于追踪值的次数
ps:具备字典的所有功能 + 自己的功能
>>> import collections >>> c1=collections.Counter('asdasdf') >>> print c1 Counter({'a': 2, 's': 2, 'd': 2, 'f': 1})
1.2、c.update(d):将c、d两个计数器相加
>>> c = collections.Counter('aabc') >>> c Counter({'a': 2, 'c': 1, 'b': 1}) >>> d=collections.Counter('aab') >>> d Counter({'a': 2, 'b': 1}) >>> c.update(d) >>> c Counter({'a': 4, 'b': 2, 'c': 1})
1.3 clear() 清空计数器
>>> c Counter({'a': 4, 'b': 2, 'c': 1}) >>> c.clear() >>> c Counter()
2. 有序字典(OrderedDict):
功能:orderedDict是对字典类型的补充,他记住了字典元素的添加顺序
我们知道字典是无序的,列表是有序的,OrderedDict方法原理就是将字典赋值时的key按顺序保存到一个列表中,例如list=[k1,k2,k3,...]。最后将字典的值按key的顺序调用出来
o1 = collections.OrderedDict() o1['k1'] = 1 o1['k2'] = 2 o1['k3'] = 3 >>> o1 OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
3、默认字典(defaultdict):
功能:为字典中的values设置一个默认的类型,可以为列表,元组或者字典
例如:
>>> my_dict = collections.defaultdict(list) >>> my_dict['k1'].append(1) >>> my_dict defaultdict(<type 'list'>, {'k1': [1]})
这里由于定义了默认values的类型为list,所以后面才能使用append方法,往列表赋值
默认字典2:上面的例子还可以这样写
>>> dic = {} >>> dic['k1'] = [] >>> dic['k1'].append(1) >>> dic {'k1': [1]}
示例:
有一个列表list1=[11,22,55,66,77,90],将该列表中大于66的值放在字典dict1的k2中,其他的值放在k1中
使用默认字典,这样写:
>>> import collections >>> list1=[11,22,55,66,77,90] >>> dict1=collections.defaultdict(list) >>> for value in list1: ... if value > 66: ... dict1['k2'].append(value) ... else: ... dict1['k1'].append(value) ... >>> dict1 defaultdict(<type 'list'>, {'k2': [77, 90], 'k1': [11, 22, 55, 66]})
4、可命名元组(namedtuple):
根据namedtuple可以创建一个包含tuple所有功能以及其他功能的类型
需求:通常我们可以用元组表示x、y轴坐标,例如(1,4)但是我们事先约定好了1的位置表示x轴,4为y轴。加入事先没有约定x、y轴的位置,那么我们就不清楚哪个是x轴,哪个是y轴。那么我们如何定义一个元组,将x、y轴的值在元组中进行命名呢?
示例
>>> mytuple = collections.namedtuple('mytuple',['x','y']) >>> tuple1 = mytuple(1,2) >>> tuple1 mytuple(x=1, y=2)
5、deque()双向队列
deque可以从队列两端添加和删除元素
>>> q = collections.deque() >>> q.append(1) >>> q.append(2) >>> q.append(3) >>> q deque([1, 2, 3]) >>> q.pop() 3 >>> q.popleft() 1 >>> q deque([2])
extend()
扩展队列
>>> q deque([2]) >>> q.extend('3') >>> q deque([2, '3'])
extendleft()
从左边扩展队列
>>> q deque([2, '3']) >>> q.extendleft('1') >>> q deque(['1', 2, '3'])
remove()
删除队列中的某个元素
>>> q.remove(2) >>> q deque(['1', '3'])
6、Queue()单项队列
单项队列没有左右之分,但是有一个原则就是先进先出:FIFO(first in first out)与之相反的就是栈,先进后出,类似于弹夹的原理
>>> import Queue >>> q = Queue.Queue(10) >>> q <Queue.Queue instance at 0x1085c3878> >>> q.put(1) >>> q.put(2) >>> q.put(3) >>> q <Queue.Queue instance at 0x1085c3878> >>> q.get() 1 >>> q.get() 2 >>> q.get() 3
转载于:https://blog.51cto.com/zengestudy/1821985