一些模块

一、collections模块
collections模块主要封装了⼀些关于集合类的相关操作,如Counter, deque, OrderDict, defaultdict以及namedtuple 等。

1 Counter:计算可迭代对象里的元素出现次数,返回一个字典。并且可以对计算的次数和iterable进行如相加的操作。

1.1计算字符串中字符的出现次数

>>> collections.Counter('aaabbbbbccccdd')
Counter({'b': 5, 'c': 4, 'a': 3, 'd': 2})

1.2 还可以自己选择计数的元素,此时返回的是一个由元祖组成的列表。排列顺序是先按照次数多的排列,如果次数相同,先出现的先排列(collections.Counter('aaaAAAAbbbbbccccdd1111').most_common(3),3表示需计算的元素个数)

>>> collections.Counter('aaaAAAAbbbbbccccdd1111').most_common(3)
[('b', 5), ('A', 4), ('c', 4)]

1.3 支持2个可迭代对象的计数相加,相减,集合的与,或等操作,举例:‘abbb'和'abcc’的计数结果相加

>>> collections.Counter('abbb') + collections.Counter('abcc')
Counter({'b': 4, 'a': 2, 'c': 2})

2 deque 双向队列,队列queue,栈

队列和栈是两种常用的数据结构,它们特点是1.队列-FIFO即First in First Out,先进先出;2.栈-FILO即先进最后出;而双向队列是TITO(Two In Two out)两头进,两头出

2.1 队列,用起来非常简洁明了,.put加队列,.get出队列

>>> import queue
>>> q=queue.Queue()
>>> q.put('第一个')
>>> q.put('第二个')
>>> q.get()
'第一个'
>>> q.get()
'第二个'

如果队列没元素了还往外取元素,此时程序会阻塞。

>>> q.get()
PS:一直停在这里,等待着,像交通阻塞一样

2.2 双向队列

双向队列和队列一样,只是进队列变成.append,出队列变成.pop。注意,deque是在collections 模块中的。

>>> from collections import deque
>>> q = deque()
>>> q.append('第一个') # 默认从右边添加
>>> q.append('第二个')
>>> q.appendleft('左边第一个') # 左边添加
>>> q.appendleft('左边第二个')
>>> q
deque(['左边第二个', '左边第一个', '第一个', '第二个'])
>>> q.pop()
'第二个'
>>> q.popleft() # 左边删除
'左边第二个'

2.3 栈

栈和队列相反,先进后出,在python里栈是有上限的,为1000,但是可以手动修改。或者可以这样理解:栈是一个可以手动修改大小的特殊的有序表。

一个栈最起码要有3个属性:1.容器,即用来放栈的地方;2.大小,规定了这个容器的容量;3 栈顶指针,即下一个元素的定位,定位元素以便能拿取元素

3 namedtuple 命名元组
对元素进行命名

>>> s = namedtuple('sky',['x','y','z'])
>>> obj = s(1,2,3)
>>> obj
sky(x=1, y=2, z=3)
>>> obj.z
3

4 对字典进行操作

orderdict:把字典变成有序字典

defaultdict: 可以给字典设置默认值. key不存在时. 直接获取默认值 。注意,默认值必须是可调用对象,如函数

 

猜你喜欢

转载自www.cnblogs.com/jackfree/p/10063509.html