collection模块 1
namedtuple 可命名元祖
from collections import namedtuple point = namedtuple('point',['x','y']) P = point(1,2) print(P.x) print(P.y) print(P)
queue 队列
import queue a = queue.Queue()#创建一个空队列 a.put(1) a.put(3) a.put(4)#输入值 print(a.get()) print(a.get()) print(a.get())#取值,先进先出。与堆栈不同,堆栈先进后出。
对了,注意。在当你get到队列最后一个时,如果还有get就会造成阻塞。此时就会停留在最后一个,知道你put下一个值进去
我们如果要想要在get超出我们队列值时结束。只需要在后面加一句 队列名.qsise()就行
import queue a = queue.Queue()#创建一个空队列 a.put(1) a.put(3) a.put(4)#输入值 print(a.get()) print(a.get()) print(a.get())#取值,先进先出。与堆栈不同,堆栈先进后出。 print(a.qsize())
我们就可以看到python直接返回0,告诉我们后面已经没有了。
deque 双端队列
from collections import deque a = deque([5,6])#创建一个双端队列 a.append('a')#从前面添加[a,5,6] a.appendleft('b')#从后添加[a,5,6,b] a.insert(2,3)#注意是按索引插入的[a,5,3,6,b] a.pop()#从前取值 a.popleft()#从后取值
注意与队列的区别。
将其打印出来如下。
缺点:因为可以插入,所以安全性和queue先比要低很多。
在使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢,因为list时线性存储,数据量大的时候,插入和删除的效率都很低。
Ordereddict 有序字典
from collections import OrderedDict #列如,我们先创建一个字典 d = dict([('a',6),('b',23),('c',9)])#这个时候key是无序的。 Or = OrderedDict([('a',6),('b',23),('c',9)])#此时字典就变为有序的了。 #这个时候会我们就可以对它进行遍历。 print(Or['a']) for i in Or: print(i)
如果字典很长时,不适合用有序列表。适用于商品价格之内的应用。
defaultdict 默认字典
举个栗子:我想要将一个列表中的数分类,分别放在字典的k1,k2键对应的值中。我们可以这样写
from collections import defaultdict values = [11,22,3,66,77,88,999,99999] 套你大象 = defaultdict(list)#这里可以是任意可调用的数据类型、 for i in values: if i >66: 套你大象['k1'].append(i)#没有k1就创建一个k1key。 else: 套你大象['k2'].append(i)
如果我们是需要返回一个值时,这是是不可要调用的数据。我们要怎样返回呢?
O(∩_∩)O,这是我们可以定义一个匿名函数,把我们需要返回的值变成lambda的返回值。这是我们就可以调用了。
counter 计数器
from collections import Counter a = 'sdhfksdhfjsdghfuiwefbhjksd' print(Counter(a))
只能计算字符串