且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

collections系列功能介绍

更新时间: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











本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1821985,如需转载请自行联系原作者