上节课复习:
1、队列与堆栈
队列:先进先出FIFO 例如:排队
堆栈:后进先出LIFO 例如:叠衣服
2、字典
3、setdefault
温故知新: Python 字典 setdefault() 方法和 get() 方法类似, 如果 key 在 字典中,返回对应的值。 如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。 d = {'name':'egon','age':18,'gender':'xxx'} d.setdefault('gender','male') # {'name': 'egon', 'age': 18, 'gender': 'xxx'} d.update({'gender':'male'}) #{'name': 'egon', 'age': 18, 'gender': 'male'} print(d) res = d.setdefault('gender','male') # xxx print(res)View Code
今日内容
一、集合类型
数据类型总结
二、文件处理
1、什么是文件
2、为何要用文件
3、如何用文件
一、集合
1、用途:
去重:
(1) 无法保证顺序
msg = 'hello' res = set(msg) print(''.join(res)) # oehl
(2) 只能针对不可元素去重
student_info = [ {'name':'egon','age':18,'gender':'male'}, {'name':'tom','age':19,'gender':'male'}, {'name':'jack','age':38,'gender':'male'}, {'name':'egon','age':18,'gender':'male'}, {'name':'egon','age':18,'gender':'male'}, ] new_l = [] for info in student_info: if info not in new_l: new_l.append(info) print(new_l) >>>: [{'name': 'egon', 'age': 18, 'gender': 'male'}, {'name': 'tom', 'age': 19, 'gender': 'male'}, {'name': 'jack', 'age': 38, 'gender': 'male'}]View Code
关系运算
2、定义方式:在{}内用逗号分隔开多个元素,集合内元素的特征有三个:
(1)集合内元素必须是不可变元素
(2)集合内元素不能重复
(3)集合内元素无序
s = {11,11,22,33,33} # s = set(...) print(s) # {33, 11, 22} print(type(s)) # <class 'set'>
数据类型转换
res = set('hello') print(res) # {'l', 'o', 'e', 'h'} # 定义一个空集合 s = set() print(type(s)) # <class 'set'>
3、常用操作+内置方法
优先掌握的操作:
1、长度len s1 = {1,2,3} print(len(s1)) # 3 2、成员运算in和not in s1 = {1,2,3} print(3 in s1) # True print(3 not in s1) # False 1、|并集(合集):两个集合并到一起 2、&交集:取两个集合的共同部分 3、-差集:一个集合减掉与另一个集合共同的部分 4、^对称差集(交叉补集):求两个集合互相减,然后再并到一起 5、== 6、父集:>,>= 当一个集合完全包含了另外一个集合,该集合才能称为爹 s1 = {1,2,3} s2 = {4,5,6} print(s1 >= s2) # False print(s1.issuperset(s2)) 7、子集:<,<= print(s1 <= s2) # False print(s1.issubset(s2)) 举例: pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy','gangdan'} list1 = pythons | linuxs # {'egon', 'yuanhao', 'wupeiqi', 'oldboy', 'biubiu', 'gangdan', 'alex'} print(pythons.intersection(linuxs)) print(pythons.intersection_update(linuxs)) list2 = pythons & linuxs # {'wupeiqi', 'gangdan'} print(pythons.union(linuxs)) list3 = pythons - linuxs # {'yuanhao', 'alex', 'egon', 'biubiu'} print(pythons.difference(linuxs)) list4 = linuxs - pythons # {'oldboy'} print(linuxs.difference(pythons)) list5 = pythons ^ linuxs # {'egon', 'oldboy', 'yuanhao', 'biubiu', 'alex'} print(pythons.symmetric_difference(linuxs))View Code
需要掌握的操作:
s1 = {1,2,3} # 1、s1.update() s1.update({3,4,5}) print(s1) # {1, 2, 3, 4, 5} # 2、s1.add() s1.add(4) print(s1) # {1, 2, 3, 4} # 3、删除 # 3.1 remove(3) s1.remove(3) print(s1) # {1, 2} # 3.2 pop() res = s1.pop() # 随机删除 返回删除的值 print(s1) print(res) # 3.3 discard() s1.discard(444444) # 删除不存在的元素不会报错 print(s1) # {1, 2, 3} # 3.4 clear() s1.clear() print(s1) # set() # 4、copy res = s1.copy() print(res) # {1, 2, 3} # 5、isdisjoint() s1 = {1,2,3} s2 = {4,5,6} print(s1.isdisjoint(s2)) # TrueView Code
该类型总结:
存多个值 无序 可变
数据类型总结:
数字 字符串 集合:无序,即无序索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存储相关信息,可变,需要处理数据的增删改 字典:无序,需要key与value映射的相关信息,可变,需要处理数据的增删改
按存值个数区分:
标量/原子类型 | 数字,字符串 |
容器类型 | 列表,元组,字典,集合 |
按照可变不可变区分:
可变 | 列表、字典 |
不可变 |
数字、字符串、元组 |
按访问顺序区分:
直接访问 | 数字 |
顺序访问(序列类型) | 字符串,列表,元组 |
key值访问(映射类型) | 字典 |
二、文件处理
1、什么是文件
文件时操作系统提供给用户或者应用程序操作硬盘的一种机制
python中文件是对象
Linux文件:一切设备都可以看成是文件
文件的作用:把一些数据以文件的形式存储起来,文件由文件系统进行管理,当程序下一次执行的时候,通过文件系统快速找到对应的文件,而找到对应的数据,省时省力。
2、为何要用文件
读写文件 ---> 存取硬盘
应用程序: open()
操作系统: 打开文件
计算机硬件: 硬盘空间
3、如何用文件
1)打开文件
方式一:open
# encoding指定字符编码表 f = open(r'a\a.txt',mode ='rt',encoding='utf-8') # f的值 ---> 文件句柄,文件对象 res = f.read() print(res)
f.close() # 回收操作系统的资源
方式二:with open
with open(r'a\a.txt',mode = 'rt',encoding = 'utf-8') as f: res = f.read() print(res)
2)读/写
要了解文件读写模式,需要了解几种模式的区别,以及对应指针
1、控制读写操作模式
r: 读取文件,文件存在的时候,文件指针调到文件开头,若文件不存在则会报错 ----->默认
w:写入文件,在文件存在的时候会清空文件,文件指针调到文件开头,若文件不存在则会先创建再写入,会覆盖源文件
a:写入文件,在文件存在的时候不会清空文件,文件指针调到文件末尾,若文件不存在则会先创建再写入,但不会覆盖源文件,而是追加在文件末尾
2、控制读写内容模式
t:读写都是文本格式,即读写都是字符串 ----->默认
b:读写都是bytes格式,bytes等同于二进制
强调:如果是 t 模式,一定记住加上encoding = '编码格式'
如果是 b 模式。一定记住别加encoding = '编码格式'
3、 +
r+:可读可写,文件不存在也会报错,写操作是会覆盖
w+:可读,可写,文件不存在先创建,会覆盖
a+:可读,可写,文件不存在先创建,不会覆盖,追加在末尾
注意:这里的覆盖是指每次重新打开文件进行操作是覆盖原来的,如果实在打开文件中则不会覆盖
3)关闭文件
文件关闭的原因:
*将写缓存同步到磁盘
*Linux系统中每一个进程打开文件的个数是有限的,如果打开文件数到了系统限制,则会打开失败。