目 录
-
collections模块
-
time 模块
-
random 模块
-
os 模块
-
sys 模块
-
序列化模块
一、collections 模块
具名元组 namedtuple : 给元组定义名字。
namedtuple() 有两个参数,一个是定义的名字,另一个是元组内的变量名字必须是字符串或可迭代对象。
# 具名元组 : 将自己建造的元组进行命名 # 示例1 建造坐标 from collections import namedtuple # namedtuple 括号内有两个参数,一个是自己起的元组名称,另一个可以是可迭代对象或字符串 point = namedtuple('基地坐标',['x','y']) # 第二个参数是可迭代对象 res = point(1,2) print(res) # 基地坐标(x=1, y=2) point1 = namedtuple('极地坐标','x y z') # 第二个参数也可以是字符串,但要注意字符串之间要以空格隔开,不然会认为是一个字符 res2 = point1(3,4,5) print(res2) # 极地坐标(x=3, y=4, z=5)
# 示例2 扑克牌 from collections import namedtuple point = namedtuple('黑桃K',"color number") res = point('黑色桃型','K') print(res) # 黑桃K(color='黑色桃型', number='K')
双端队列 deque:
# 从collections 引出双端队列之前,先看一下队列: # 队列:IFIO 先进先出原则 import queue q = queue.Queue() # 生成一个队列对象 q.put('xiao zhu') # .put() 方法给队列添加元素 q.put('xiao lu') q.put('xiao qin') res = q.get() # .get() 方法取值 res1 = q.get() res2 = q.get() res3 = q.get() print(res,res1,res2) # xiao zhu xiao lu xiao qin print(res3) # 如果队列中的值取完后,程序会一直运行并等待,直到取到值为止
""" 双端队列:deque 两端都可以进出 方法:append() appendleft() pop() popleft() """ from collections import deque q = deque(['w','e','r']) # 直接deque方法生成双端队列 q.append('猪') q.appendleft('猴') print(q) # deque(['猴', 'w', 'e', 'r', '猪']) q.pop() q.popleft() print(q) # deque(['w', 'e', 'r']) # 队列一般是不支持在队内插值的,只能在首尾插值 # 但是双端队列比较特殊,可以在任意位置查入元素 q.insert(1,'诸侯死对头') print(q)
有序字典:OrderedDict
""" 原生字典是无序的,打印出来的key值顺序是不固定的; 但是 OrderedDict 的key值是有序的,按照插入的顺序排列 """ normal_dict = dict([('zhu',1),('lu',2),('qin',3)]) print(normal_dict) # {'zhu': 1, 'lu': 2, 'qin': 3} from collections import OrderedDict dict = OrderedDict([('zhu',1),('lu',2),('qin',3)]) print(dict) # OrderedDict([('zhu', 1), ('lu', 2), ('qin', 3)]) 返回一个对象 dict1 = OrderedDict() # print(dict1) # dict1['x'] = 1 # dict1['y'] = 2 # dict1['z'] = 3 # print(dict1) # OrderedDict([('x', 1), ('y', 2), ('z', 3)]) # for i in dict1: # print(i,end=' ') # x y z dict1['x'] = 1 dict1['K'] = 666 dict1['y'] = 2 dict1['z'] = 3 print(dict1) # OrderedDict([('x', 1), ('K', 666), ('y', 2), ('z', 3)]) for i in dict1: print(i,end=' ') # x K y z 我们可以看出key的排列是有顺序的,是按照插入顺序排序
默认字典 defaultdict
# 默认字典 defaultdict from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] dict = defaultdict(list) # 后续字典中新建的key值对应的value就是列表 #print(dict['wer']) # [] 新添加的key值‘wer’对应的value就是空列表 for i in values: if i > 66: dict['k1'].append(i) else: dict['k2'].append(i) print(dict) # defaultdict(<class 'list'>, {'wer': [], 'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
计数器 counter
# 计数器counter # 需求:将s = 'abcdeabcdabcaba' 统计字符数量并写成字典形式 d = {} for i in s: d[i] = 0 print(d) # {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0} 可以完成去重 # 代码 from collections import Counter s = 'abcdeabcdabcaba' res = Counter(s) print(res) # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
二、time 模块
time模块里有三种表现形式:
1、时间戳 time.time()
2、格式化时间 time.strftime()
3、结构化时间 time.localtime()