python collection模块
一、模块的认识
定义:模块就是我们把装有特定功能的代码进行归类的结果。
说明:从代码编写的单位来看我们的城西,从小到大:一条代码 -> 语句块 - >代码块(函数、类)-> 模块。
模块引入的方法:
1、import 模块
2、from xxx import 模块
二、collections模块
collectionz模块中主要封装了一些关于集合类的相关操作,比如之前学过的Iterable,Iterator等等,今日主要记录的是Couter,deque,OrderDict,defaultdict,defaultdict以及namedtuple.
(1)Couter
Couter时一个计数器,主要用于计数.
# 计算字符串中每个元素出现的次数 # 普通方法 str="alex like pig" dic={} for el in str: dic[el]=dic.setdefault(el,0)+1 print(dic)
# 借用collections模块中 的Counter(计数器) str="alex like pig" import collections print(collections.Counter(str)) from collections import Counter c=Counter(str)
print(Counter(c)) # 获取到的结果可以像字典⼀样进⾏使⽤ [key]
(2)deque 双向队列
1. 栈: FILO. 先进后出 -> 砌墙的砖头, 老师傅做馒头
# 栈 track (先进后出) class TrackFullError(Exception): pass class TrackEmptyError(Exception): pass class Track: def __init__(self,size): self.index=0 self.lst=[] self.size=size def push(self,item): ''' 入栈 :param item: 入栈元素 :return: ''' if self.index>4: raise TrackFullError("Track is Full") self.lst.insert(self.index,item) self.index+=1 print(self.lst) def pop(self): ''' 出栈 :return: ''' self.index-=1 if self.index<0: raise TrackEmptyError("Track is Empty") item=self.lst.pop(self.index) print(item)
2. 队列: FIFO. 先进先出 -> 买火⻋票排队, 所有排队的场景
注意. 如果队列⾥没有元素了. 再也就拿不出来元素了. 此时程序会阻塞
#队列queue (先进先出) import queue # 创建队列对象 q=queue.Queue() q.put("赵") q.put("钱") q.put("孙") q.put("李") print(q.get()) #赵 print(q.get()) #钱 print(q.get()) #孙 print(q.get()) #李 # print(q.get()) 队列里面没有元素,会等待,不报错
双向队列 :deque
说明:既能从左进,也能从右进;既能从左边出也能从右边出。
from collections import deque c=deque() c.append("风") #从右侧开始添加 c.append("雨") c.appendleft("电") #从左侧开始添加 c.appendleft("雷") print(c) #deque(['雷', '电', '风', '雨']) print(c.pop()) #从右侧开始弹出 print(c.pop()) print(c.popleft()) print(c.popleft())#从左侧开始弹出 print(c.popleft()) #IndexError: pop from an empty deque
(3)命名元组 namedtuple
命名元组:本质就是一个元组,命名元祖可以进行解包。
# # 命名元祖 namedtuple 终归是一个元祖,不能更改 from collections import namedtuple point=namedtuple("点",["x","y"]) p=point(5,10) print(p) print(p.x) print(p.y) # p.x=10 #can't set attribute # p.z=16 #AttributeError: '点' object has no attribute 'z'
(4)defaultdict 字典默认值
默认值 defaultdict执行流程:
1、defaultdict中必须是一个可以被调用的对象;
2、如果存在key,返回相应的value,如果不存在则执行可调用对象,并吧结果返回
from collections import defaultdict # d=defaultdict(list) # print(d["华辣汤"])#当defaultdict中不存在"华辣汤",则执行了list( )
(5)orderdict和defaultdict
orderdict 顾名思义. 字典的key默认是⽆序的. ⽽OrderedDict是有序的 ,但是从python3.6以后的版本
,我们看到的字典都是有序的。