目录
🍔 列表集合字典的推导式
1.1 什么是推导式
1.2 为什么需要推导式
1.3 列表推导式
1.4 列表推导式 + if条件判断
1.5 for循环嵌套列表推导式
1.6 字典推导式
1.7 集合推导式
🍔 数据序列中的公共方法
2.1 什么是公共方法
2.2 常见公共方法1
2.3 常见公共方法2
2.4 序列类型之间的相互转换
🍔 列表集合字典的推导式
1.1 什么是推导式
推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:列表推导式
、集合推导式
、字典推导式
。
[1, 2, 3] 推导式 [1, 4, 9]
1.2 为什么需要推导式
案例:创建一个0-9的列表
while循环:
# 初始化计数器 i = 0 list1 = [] # 编写循环条件 while i <= 9:list1.append(i)# 更新计数器i += 1 print(list1)
for循环:
list1 = [] # 编写for循环 for i in range(0, 10):list1.append(i) print(list1)
思考:我们能不能把以上代码简化为一行代码搞定这个程序呢?
答:可以,使用推导式
1.3 列表推导式
基本语法:
变量名 = [表达式 for 变量 in 列表] 变量名 = [表达式 for 变量 in 列表 if 条件] 变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]
案例:定义0-9之间的列表
list1 = [] for i in range(10):list1.append(i) print(list1)
列表推导式
list1 = [i for i in range(10)] print(list1)
执行原理:[i for i in range(10)]
列表推导式先运行表达式右边的内容: 当第一次遍历时:i = 0,其得到变量i的结果后,会放入最左侧的变量i中,这个时候列表中就是[0] 当第二次遍历时:i = 1,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1] ... 当最后一次遍历时:i = 9,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1.4 列表推导式 + if条件判断
在使用列表推导式时候,我们除了可以使用for循环,其实我们还可以在其遍历的过程中,引入if条件判断。
变量 = [表达式 for 临时变量 in 序列 if 条件判断] 等价于 for 临时变量 in 序列:if 条件判断
案例:生成0-9之间的偶数(i%2 == 0)序列
list1 = [i for i in range(10) if i % 2 == 0] print(list1)
1.5 for循环嵌套列表推导式
for 临时变量 in range(n):for 临时变量 in range(n):
基本语法:
变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列]
案例:创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
(1,0) (1, 0-2)
(1,1) (1, 0-2)
(1,2) (1, 0-2)
(2,0) (2, 0-2)
(2,1) (2, 0-2)
(2,2) (2, 0-2)
原生代码:for循环嵌套
list1 = [] # 外层循环 for i in range(1, 3):# 内层循环for j in range(0, 3):tuple1 = (i, j)list1.append(tuple1) print(list1)
列表推导式:
list1 = [(i, j) for i in range(1, 3) for j in range(0, 3)] print(list1)
1.6 字典推导式
思考:有如下两个列表,如何快速合并为一个字典?
list1 = ['name', 'age', 'gender'] list2 = ['Tom', 20, 'male'] person = {'name':'Tom', 'age':20, 'gender':'male'}
答:使用字典推导式
基本语法:
① 字典推导式列表推导式思想的延续,语法差不多,只不过产生的是字典而已。
② 字典推导式格式:
变量 = {key:value for key,value in 序列}
字典推导式作用:==快速合并列表为字典或提取字典中目标数据。==
案例1:创建一个字典:字典key是1-5数字,value是这个数字的2次方。
dict1 = {1:1, 2:4, 3:9, 4:16, 5:25}
dict1 = {i:i**2 for i in range(1,6)} print(dict1)
案例2:把两个列表合并为一个字典
list1 = ['name', 'age', 'gender'] list2 = ['Tom', 20, 'male'] # 结果:person = {'name':'Tom', 'age':20, 'gender':'male'} person = {list1[i]:list2[i] for i in range(len(list1))} print(person)
案例3:提取字典中目标数据(面试题)
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'ACER': 99} # 需求:提取上述电脑数量大于等于200的字典数据 counts = {key:value for key, value in counts.items() if value >= 200} print(counts)
1.7 集合推导式
集合推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]。
思考:为什么需要集合推导式,列表推导式不香么?
答:集合的最大特点就是==去重==
需求:创建一个集合,数据为下方列表的2次方。
list1 = [1, 1, 2] set1 = {1, 4}
推导式
list1 = [1, 1, 2]
set1 = {i**2 for i in list1}
print(set1)
🍔 数据序列中的公共方法
2.1 什么是公共方法
所谓的公共方法就是支持大部分数据序列。
2.2 常见公共方法1
运算符 | 描述 | 支持的容器类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 复制 | 字符串、列表、元组 |
in | 元素是否存在 | 字符串、列表、元组、字典、集合 |
not in | 元素是否不存在 | 字符串、列表、元组、字典、集合 |
案例1:+ 合并
# 1、+加号,代表两个序列之间的连接与整合 str1 = 'hello' str2 = 'world' print(str1 + str2) # 2、定义两个列表,对其数据进行整合 list1 = ['刘备', '关羽'] list2 = ['诸葛亮', '赵云'] print(list1 + list2) # 3、定义两个元组,对其数据进行整合 tuple1 = (10, 20) tuple2 = (30, 40) print(tuple1 + tuple2)
案例2:* 复制
# 1、字符串与乘号的关系 print('-' * 40) print('传智教育Python管理系统V1.0') print('-' * 40) # 2、列表与乘号的关系 list1 = ['*'] print(list1 * 10) # 3、元组与乘号的关系 tuple1 = (10, ) print(tuple1 * 10)
案例3:in与not in方法
ips = ['192.168.10.11', '10.1.1.100', '172.15.184.31'] if '10.1.1.100' in ips:print('列表中元素已存在') else:print('列表中元素不存在')
2.3 常见公共方法2
编号 | 函数 | 描述 |
---|---|---|
1 | len() | 计算容器中元素个数 |
2 | del或del() | 根据索引下标删除指定元素 |
3 | max() | 返回容器中元素最大值 |
4 | min() | 返回容器中元素最小值 |
5 | range(start, end, step) | 生成从start到end(不包含)的数字,步长为 step,供for循环使用 |
6 | enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 |
案例1:len() 获取字符串、列表、元组、字典、集合的长度
# 定义一个字符串 str1 = 'hello world' print(f'字符串的长度为{len(str1)}') # 定义一个列表 list1 = [10, 20, 30, 40, 50] print(f'列表的长度为{len(list1)}') # 定义一个字典 dict1 = {'name':'哆啦A梦', 'gender':'male', 'address':'东京'} print(f'字典的长度为{len(dict1)}')
案例2:del方法,用于删除序列中指定的元素(根据索引下标)
# 定义一个列表 list1 = ['吕布', '董卓', '貂蝉'] # 使用del方法删除董卓 del list1[1] print(list1) # 定义一个字典 dict1 = {'name':'白龙马', 'age':23, 'address':'东海龙宫'} # 使用del方法删除age del dict1['age'] print(dict1)
案例3:求某个序列中元素的最大值和最小值
num1 = int(input('请输入第一个数:')) num2 = int(input('请输入第二个数:')) num3 = int(input('请输入第三个数:')) list1 = [num1, num2, num3] max_num = max(list1) min_num = min(list1) print(f'最大值:{max_num}') print(f'最小值:{min_num}')
案例4:enumerate(),把一个序列类型(列表、元组、字符串)的数据构造成key:value结构,然后结合for循环进行遍历
list1 = [10, 20, 30, 40, 50] n = 1 for i in list1:print(f'第{n}个数:{i}')n += 1 print('-' * 40) for key, value in enumerate(list1):print(f'第{key+1}个数:{value}')
2.4 序列类型之间的相互转换
list()方法:把某个序列类型的数据转化为列表
# 1、定义元组类型的序列 tuple1 = (10, 20, 30) print(list(tuple1)) # 2、定义一个集合类型的序列 set1 = {'a', 'b', 'c', 'd'} print(list(set1)) # 3、定义一个字典 dict1 = {'name':'刘备', 'age':18, 'address':'蜀中'} print(list(dict1))
tuple()方法:把某个序列类型的数据转化为元组
# 定义一个列表类型的数据 list1 = ['a', 'b', 'c', 'd'] print(tuple(list1)) # 定义一个集合类型的数据 set1 = {10, 20, 30, 40} print(tuple(set1))
set()方法:将某个序列转换成集合(但是要注意两件事 => ① 集合可以快速完成列表去重 ② 集合不支持下标)
# 定义一个列表类型的数据 list1 = ['a', 'b', 'c', 'd', 'a'] print(set(list1)) # 定义一个元组类型的数据 tuple1 = (10, 20, 30, 40) print(set(tuple1))
💘若能为您的学习之旅添一丝光亮,不胜荣幸💘
🐼期待您的宝贵意见,让我们共同进步共同成长🐼