一、定义
python的一种独有特性, 推导式是可以从一个数据序列构建另一个新的数据序列的结构体
列表推导式,字典推导式,集合推导式(集合是可变数据类型,集合中的元素是不可变数据类型)
1、列表推导式
提供了简单的生成列表的方法
(1)语法结构
①list = [表达式 for item in 容器]
②list = [表达式 for item in 容器 if 条件]
③list = [表达式 for item1 in 容器1 for item2 in 容器2]
(2)执行流程
①循环遍历出容器中的每个元素item,应用到前边的表达式中,表达式产生的结果为最终列表中的元素
②循环遍历出容器中的每个元素item,使用if判断是否满足条件,满足条件的item应用表达式产生新列表中的元素
③通过两个for循环遍历出容器的元素, 将元素应用到表达式中组成新列表中的元素
1 # 将一个嵌套列表转成一个一维列表 2 list_num = [[1,2,3], [4,5,6], [7,8,9]] 3 list9 = [x for lst in list_num for x in lst] 4 print(list9) # [1, 2, 3, 4, 5, 6, 7, 8, 9] 5 6 # 现有一个列表 list1 = [[1,2,3], [4,5,6], [7,8,9]] 7 # 通过该列表生成一个新列表[1,4,7] 8 # 通过该列表生成一个新列表[2,5,8] 9 10 list10 = [lst[0] for lst in list_num] 11 print(list10) # [1, 4, 7] 12 13 list11 = [lst[1] for lst in list_num] 14 print(list11) # [2, 5, 8]
2、字典推导式
是列表推导式思想的延续, 语法结构差不多, 只不过最终产生的是字典而已
语法结构
dict = { key表达式 : value表达式 for item in 容器}
dict = { key表达式 : value表达式 for item in 容器 if 条件}
dict = { key表达式 : value表达式 for item1 in 容器1 for item2 in 容器2}
1 # 字典, 将字典中的key,value进行互换 2 dict1 = {"name": "rose", "age": 17, "sex": "女"} 3 dict2 = {v: k for k, v in dict1.items()} 4 print(dict2) #{‘rose‘: ‘name‘, 17: ‘age‘, ‘女‘: ‘sex‘} 5 6 # 使用字典推导式, 将list1中的元素作为key, 将list2中的元素作为value, 产生一个字典 7 list1 = ["施耐庵", "吴承恩", "曹雪芹", "罗贯中"] 8 list2 = ["水浒传", "西游记", "红楼梦", "三国演义"] 9 dict3 = {x: list2[list1.index(x)] for x in list1 } 10 print(dict3) 11 dict4 = {list1[x]: list2[x] for x in range(len(list1))} 12 print(dict3) 13 14 # zip() 打包, 将多个可迭代对象(序列)中的相同索引值的元素, 放在一个元组里, 最终将所有的元组组成一个新的可迭代对象 15 dict5 = {k: v for k, v in zip(list1, list2)} # [(施耐庵, 水浒传) (吴承恩,西游记) (曹雪芹,红楼梦) (罗贯中,三国演义)] 16 print(dict5)
3、集合推导式
集合推导式和列表推导式很相似, 唯一的区别就是用{}代替[]
(1)语法结构
①set = {表达式 for item in 容器}
②set = {表达式 for item in 容器 if 条件}
③set = {表达式 for item1 in 容器1 for item2 in 容器2}
(2)特点:自动去重功能
1 list1 = [9, 8, 7, -2, 2, -3, -7, 9] 2 # 使用集合推导式 推导出一个集合 集合中的元素是list1中元素的平方 3 set1 = {x ** 2 for x in list1} 4 print(set1) # {64, 4, 9, 81, 49}
原文地址:https://www.cnblogs.com/Tree0108/p/12110191.html