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 ...}

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-09-20 16:54  马俊南  阅读(10)  评论(0)    收藏  举报