本文共 2958 字,大约阅读时间需要 9 分钟。
collections模块是python2.7.3之后新加的功能。
查看collections模块中某个方法的使用说明
1 2 3 | >>> import collections >>> help(collections) >>> help(collections.Counter) |
1.1、计数器(Counter)
功能:Counter是对字典类型的补充,用于追踪值的次数
ps:具备字典的所有功能 + 自己的功能
1 2 3 4 | >>> import collections >>> c1=collections.Counter( 'asdasdf' ) >>> print c1 Counter({ 'a' : 2, 's' : 2, 'd' : 2, 'f' : 1}) |
1.2、c.update(d):将c、d两个计数器相加
1 2 3 4 5 6 7 8 9 | >>> 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() 清空计数器
1 2 3 4 5 | >>> c Counter({ 'a' : 4, 'b' : 2, 'c' : 1}) >>> c. clear () >>> c Counter() |
2. 有序字典(OrderedDict):
1 | 功能:orderedDict是对字典类型的补充,他记住了字典元素的添加顺序 |
我们知道字典是无序的,列表是有序的,OrderedDict方法原理就是将字典赋值时的key按顺序保存到一个列表中,例如list=[k1,k2,k3,...]。最后将字典的值按key的顺序调用出来
1 2 3 4 5 6 | o1 = collections.OrderedDict() o1[ 'k1' ] = 1 o1[ 'k2' ] = 2 o1[ 'k3' ] = 3 >>> o1 OrderedDict([( 'k1' , 1), ( 'k2' , 2), ( 'k3' , 3)]) |
3、默认字典(defaultdict):
功能:为字典中的values设置一个默认的类型,可以为列表,元组或者字典
例如:
1 2 3 4 | >>> my_dict = collections.defaultdict(list) >>> my_dict[ 'k1' ].append(1) >>> my_dict defaultdict(< type 'list' >, { 'k1' : [1]}) |
这里由于定义了默认values的类型为list,所以后面才能使用append方法,往列表赋值
默认字典2:上面的例子还可以这样写
1 2 3 4 5 | >>> dic = {} >>> dic[ 'k1' ] = [] >>> dic[ 'k1' ].append(1) >>> dic { 'k1' : [1]} |
示例:
有一个列表list1=[11,22,55,66,77,90],将该列表中大于66的值放在字典dict1的k2中,其他的值放在k1中
使用默认字典,这样写:
1 2 3 4 5 6 7 8 9 10 11 | >>> 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轴的值在元组中进行命名呢?
示例
1 2 3 4 | >>> mytuple = collections.namedtuple( 'mytuple' ,[ 'x' , 'y' ]) >>> tuple1 = mytuple(1,2) >>> tuple1 mytuple(x=1, y=2) |
5、deque()双向队列
deque可以从队列两端添加和删除元素
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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()
扩展队列
1 2 3 4 5 | >>> q deque([2]) >>> q.extend( '3' ) >>> q deque([2, '3' ]) |
extendleft()
从左边扩展队列
1 2 3 4 5 | >>> q deque([2, '3' ]) >>> q.extendleft( '1' ) >>> q deque([ '1' , 2, '3' ]) |
remove()
删除队列中的某个元素
1 2 3 | >>> q.remove(2) >>> q deque([ '1' , '3' ]) |
6、Queue()单项队列
单项队列没有左右之分,但是有一个原则就是先进先出:FIFO(first in first out)与之相反的就是栈,先进后出,类似于弹夹的原理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> 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 |