一、定义

  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}