day08 课程(公共方法 & 数据类型转换 & 推导式)
课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=148
8.1 公共操作之运算符加号
8.1.1 目标
运算符
公共方法
容器类型转换
8.1.2 运算符
| 运算符 | 描述 | 支持的容器类型 |
| + | 合并 | 字符串、列表、元组 |
| * | 复制 | 字符串、列表、元组 |
| in | 元素是否存在 | 字符串、列表、元组、字典 |
| not in | 元素是否不存在 | 字符串、列表、元组、字典 |
8.1.3 + 合并
str1 = 'aa' str2 = 'bb' list1 = [1, 2] list2 = [10, 20] t1 = (1, 2) t2 = (10, 20) dict1 = {"name": "Rose"} dict2 = {"age": 18} print(str1 + str2) # 字符串相加 aabb print(list1 + list2) # 列表相加 [1, 2, 10, 20] print(t1 + t2) # 元组相加 (1, 2, 10, 20) # print(dict1 + dict2) # 字典不支持合并运算, 报错: TypeError: unsupported operand type(s) for +: 'dict' and 'dict' ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\01.运算符.py aabb [1, 2, 10, 20] (1, 2, 10, 20) Process finished with exit code 0
8.2 公共操作之运算符乘号
str1 = 'a' list1 = ["hello"] t1 = ("world",) dict1 = {"name": "Rose"} print(str1 * 5) # 字符串复制5次, aaaaa print("-" * 10) # 指定的字符串复制, ---------- print(list1 * 5) # 列表复制 print(t1 * 5) # 元组复制 # print(dict1 * 5) # 字典不支持复制, 报错: TypeError: unsupported operand type(s) for *: 'dict' and 'int' ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\01.运算符.py aaaaa ---------- ['hello', 'hello', 'hello', 'hello', 'hello'] ('world', 'world', 'world', 'world', 'world') Process finished with exit code 0
8.3 公共操作之运算符判断数据是否存在
str1 = 'abcd' list1 = [10, 20, 30, 40] t1 = (100, 200, 300, 400) dict1 = {"name": "Rose", "age": 18} print("a" in str1) # 返回 True print("a" not in str1) # 返回 False print(10 in list1) # 返回 True print(10 not in list1) # 返回 False print(100 in t1) # 返回 True print(100 not in t1) # 返回 False print('name' in dict1) # 返回 True print('name' not in dict1) # 返回 False print('name' in dict1.keys()) # 返回 True print('name' in dict1.values()) # 返回 False ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\02.公共操作之运算符判断数据是否存在.py True False True False True False True False True False Process finished with exit code 0
8.4 公共方法之len
| 函数 | 描述 |
| len() | 计算容器中元素个数 |
| del 或 del() | 删除 |
| max() | 返回容器中元素最大值 |
| min() | 返回容器中元素最小值 |
| range(start, end, step) | 生成从 start 到 end 的数字,步长为 step,供 for 循环使用 |
| enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 |
str1 = 'abcdef' list1 = [10, 20, 30, 40] t1 = (100, 200, 300, 400) s1 = {10, 20, 30, 40, 50} dict1 = {"name": "Rose", "age": 18} print(len(str1)) # 统计字符串个数 返回 6 print(len(list1)) # 统计列表数据个数 返回 4 print(len(t1)) # 统计元组数据个数 返回 4 print(len(s1)) # 统计集合数据个数 返回 5 print(len(dict1)) # 统计字典键值对个数 返回 2 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\03.公共方法之len.py 6 4 4 5 2 Process finished with exit code 0
8.5 公共方法之del
str1 = 'abcdef' list1 = [10, 20, 30, 40] t1 = (100, 200, 300, 400) s1 = {10, 20, 30, 40, 50} dict1 = {"name": "Rose", "age": 18} del str1 # 删除字符串 # print(str1) # 报错:NameError: name 'str1' is not defined. # del list1 # 删除列表 # print(list1) # 报错:NameError: name 'list1' is not defined. del(list1[0]) # 删除单个数据 print(list1) # 返回 [20, 30, 40] del s1 # print(s1) # 报错:NameError: name 's1' is not defined. # del dict1 # 删除字典 # print(dict1) # 报错:NameError: name 'dict1' is not defined. del dict1['name'] # 删除单个键值对 print(dict1) # 返回 {'age': 18}
8.6 公共方法之max和min
str1 = 'abcdef' list1 = [10, 20, 30, 40] print(max(str1)) # 字符串中数据最大值 f print(min(str1)) # 字符串中数据最小值 a print(max(list1)) # 列表中数据最大值 40 print(min(list1)) # 列表中数据最小值 10 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\05.公共方法之max和min.py f a 40 10 Process finished with exit code 0
8.7 公共方法之range
注意:range() 生成的序列不包含 end 数字
for i in range(1, 10, 1): # start: 1 ,end: 10 ,step: 1 ,不包括10,步长可以不写默认是1 print(i, end='\t') # 返回 1 2 3 4 5 6 7 8 9 print() # 打印空格,用于输出时的间隔 for i in range(1, 10, 2): # 步长是 2 print(i, end='\t') # 返回 1 3 5 7 9 print() # 打印空格,用于输出时的间隔 for i in range(10): # 不写开始,从 0 开始,步长默认为 1 print(i, end='\t') # 返回 0 1 2 3 4 5 6 7 8 9 print() ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\06.公共方法之range.py 1 2 3 4 5 6 7 8 9 1 3 5 7 9 0 1 2 3 4 5 6 7 8 9 Process finished with exit code 0
8.8 公共方法之enumerate
8.8.1 语法
注意:start 参数用来设置遍历数据的下标的起始值,默认为 0
enumerate(可遍历对象, start=0)
8.8.2 快速体验
list1 = [10, 20, 30, 40, 50] for i in enumerate(list1): # 默认 start 从 0开始 print(i, end='\t') # 返回默认下标和对应值形成的元组 (0, 10) (1, 20) (2, 30) (3, 40) (4, 50) print() # 打印空格,用于输出时的间隔 for i in enumerate(list1, start=1): # start 从 1 开始 print(i, end='\t') # 返回设置下标开始值和对应值形成的元组 (1, 10) (2, 20) (3, 30) (4, 40) (5, 50) print() # 打印空格,用于输出时的间隔 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\07.公共方法之enumerate.py (0, 10) (1, 20) (2, 30) (3, 40) (4, 50) (1, 10) (2, 20) (3, 30) (4, 40) (5, 50) Process finished with exit code 0
8.9 容器类型转换
8.9.1 tuple()
作用:将某个序列转换成元组
list1 = [10, 20, 30, 40, 50] # 列表 s1 = {100, 200, 300, 400, 500} # 集合 t1 = ("a", "b", "c", "d", "e") # 元组 print(list1) # 原列表 print(tuple(list1)) # 列表转换成元组 print(s1) # 原集合 print(tuple(s1)) # 集合转换成元组 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\08.容器类型转换.py [10, 20, 30, 40, 50] (10, 20, 30, 40, 50) {400, 100, 500, 200, 300} (400, 100, 500, 200, 300) Process finished with exit code 0
8.9.2 list()
作用:将某个序列转换成列表
list1 = [10, 20, 30, 40, 50] # 列表 s1 = {100, 200, 300, 400, 500} # 集合 t1 = ("a", "b", "c", "d", "e") # 元组 print(s1) # 原集合 print(list(s1)) # 集合转换成列表 print(t1) # 原元组 print(list(t1)) # 元组转换成列表 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\08.容器类型转换.py {400, 100, 500, 200, 300} [400, 100, 500, 200, 300] ('a', 'b', 'c', 'd', 'e') ['a', 'b', 'c', 'd', 'e'] Process finished with exit code 0
8.9.3 set()
作用:将某个序列转换成集合,无序且自动去重
list1 = [10, 20, 30, 20, 50] # 列表 s1 = {100, 200, 300, 400, 500} # 集合 t1 = ("a", "b", "c", "d", "e","e") # 元组 print(list1) # 原列表 print(set(list1)) # 列表转换成集合 注意:集合有去重功能, 列表转换集合后自动去重 print(t1) # 原元组 print(set(t1)) # 元组转换成集合 注意:集合有去重功能, 元组转换集合后自动去重 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\08.容器类型转换.py [10, 20, 30, 20, 50] {10, 20, 50, 30} ('a', 'b', 'c', 'd', 'e', 'e') {'a', 'c', 'd', 'b', 'e'} Process finished with exit code 0
8.10 了解推导式
8.10.1 目标
列表推导式
字典推导式
集合推导式
注意:也叫生成式,为了用于化简代码
8.11 while 循环创建有规律的列表(5行代码)
# 需求:创建一个 0-10 的列表 list1 = [] # 创建一个空列表 i = 0 while i < 10: # 循环追加写入 list1.append(i) i += 1 print(list1) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day08\09.while 循环创建有规律的列表.py" [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0
8.12 for 循环创建有规律的列表(3行代码)
# 需求:创建一个 0-10 的列表 list1 = [] # 创建一个空列表 for i in range(10): # 循环, range 默认从 0 开始, 步长为 1 list1.append(i) print(list1) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day08\10.for 循环创建有规律的列表.py" [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0
8.13 体验列表推导式(1行代码)
作用:用一个表达式创建一个有规律的列表或控制一个有规律的列表
列表推导式又叫列表生成式
# 需求:创建一个 0-10 的列表 list1 =[ i for i in range(10) ] # [] 是因为需求要一个列表, 前面的 i 是每次循环保留循环的值到列表中,即循环的返回值 print(list1) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\11.体验列表推导式.py [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0
8.14 带 if 的列表推导式
# 需求: 创建 0-10 的偶数列表 # 方法一 步长实现偶数列表 list1 = [ i for i in range(0, 10, 2) ] # 从 0 开始, 步长为 2 print(list1) # 方法二 if 判断形式的推导式 list2 = [] for i in range(10): # 默认从 0 开始,默认 步长为 1,使用判断,符合除 2 余数为 0 的值再追加到列表中 if i % 2 == 0: list2.append(i) print(list2) # 根据方法二 改写成推导式 list3 = [ i for i in range(10) if i % 2 == 0 ] # 基于 for 化简, 返回值放到最左边 print(list3) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day08\12.带 if 的列表推导式.py" [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] Process finished with exit code 0
8.15 多 for 实现列表推导式
# 需求: 创建列表格式: [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] 数据列1 是 1、2 数据列2 是 0、1、2 list1 = [] for i in range(1, 3): for j in range(3): list1.append((i,j)) # 追加元组到列表中 print(list1) # 根据上面循环, 改写成推导式 list2 = [ (i, j) for i in range(1, 3) for j in range(3)] print(list2) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day08\13.多 for 实现列表推导式.py" [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] Process finished with exit code 0
8.16 体验字典推导式
字典推导式作用:快速合并列表为字典或提取字典中目标数据
# 需求:创建一个字典: 字典 key 是 1-5数字, value 是这个数字的 2 次方 dict1 = {} for i in range(1, 5): dict1[i] = i**2 print(dict1) # 根据上面for循环, 改写成推导式 dict2 = { i: i**2 for i in range(1, 5)} # 因为需求是字典 所以是 {}, print(dict2) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\14.体验字典推导式.py {1: 1, 2: 4, 3: 9, 4: 16} {1: 1, 2: 4, 3: 9, 4: 16} Process finished with exit code 0
8.17 合并两个列表为字典
# 思考:如果有如下两个列表, 如何快速合并为一个字典:使用字典推导式 list1 = ['name', 'age','gender'] # 角标 0、1、2 列表两个角标数要相同,否则以长的角标数报错:IndexError: list index out of range list2 = ['Tom', 20, "man" ] # 角标 0、1、2 dict1 = {} for i in range(len(list1)): # len 可以求得列表中数据数量, range 从 0 开始 dict1[list1[i]] = list2[i] # list1[0] = list2[0] ... print(dict1) # 根据上面for循环, 改写成推导式 dict2 = { list1[i] : list2[i] for i in range(len(list1)) } # 使用 i 让两个列表数据角标相同开始形成 key、value print(dict2) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\15.合并两个列表为字典.py {'name': 'Tom', 'age': 20, 'gender': 'man'} {'name': 'Tom', 'age': 20, 'gender': 'man'} Process finished with exit code 0
注意:1.如果两个列表数据个数相同,len 统计任何一个列表的长度都可以
2.如果两个列表数据个数不同,len 统计数据多的列表数据个数会报错,len 统计数据少的列表数据个数不会报错
8.18 提取字典中目标数据
# 需求:提取上述电脑数量大于等于 200 的字典数据 counts = { "MBP":268, "HP":125, "DELL":201, "Lenovo":199, "acer":99 } dict1 = {} for key,value in counts.items(): # 字典中所有键值对 if value >= 200: # 对键值对中的值进行判断 dict1[key] = value # 写入符合条件的key、value 到字典中 print(dict1) # 根据上面for循环, 改写成推导式 dict2 = { key: value for key, value in counts.items() if value >= 200 } print(dict2) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\16.提取字典中目标数据.py {'MBP': 268, 'DELL': 201} {'MBP': 268, 'DELL': 201} Process finished with exit code 0
8.19 集合推导式
注意:集合无序且自动去重
# 需求:创建一个集合, 数据为下方列表的 2次方 list1 = [1, 1, 2, 3, 3] s1 = set() for i in list1: # 遍历列表中数据 s1.add(i**2) # 数据平方写入到集合中, 集合自动去重 {1, 4, 9} print(s1) # 根据上面for循环, 改写成推导式 s2 = { i**2 for i in list1 } print(s2) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day08\17.集合.py {1, 4, 9} {1, 4, 9} Process finished with exit code 0
8.20 推导式总结
推导式的作用:简化代码
推导式写法
# 列表推导式 规律 [ xx for xx in range() ] # 字典推导式 返回键值对 [ xx1: xx2 for ... in ... ] # 集合推导式 去重 {xx for xx in ...}
———————————————————————————————————————————————————————————————————————————
无敌小马爱学习
浙公网安备 33010602011771号