更新时间:2022-09-14 23:07:02
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 |