【python基础】列表推导式&字典推导式&集合推导式

一、定义
  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循环遍历出容器的元素, 将元素应用到表达式中组成新列表中的元素

# 将一个嵌套列表转成一个一维列表
list_num = [[1,2,3], [4,5,6], [7,8,9]]
list9 = [x for lst in list_num for x in lst]
print(list9)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 现有一个列表 list1 = [[1,2,3], [4,5,6], [7,8,9]]
# 通过该列表生成一个新列表[1,4,7]
# 通过该列表生成一个新列表[2,5,8]

list10 = [lst[0] for lst in list_num]
print(list10)  # [1, 4, 7]

list11 = [lst[1] for lst in list_num]
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}

# 字典, 将字典中的key,value进行互换
dict1 = {"name": "rose", "age": 17, "sex": "女"}
dict2 = {v: k for k, v in dict1.items()}
print(dict2)  #{‘rose‘: ‘name‘, 17: ‘age‘, ‘女‘: ‘sex‘}

# 使用字典推导式, 将list1中的元素作为key, 将list2中的元素作为value, 产生一个字典
list1 = ["施耐庵", "吴承恩", "曹雪芹", "罗贯中"]
list2 = ["水浒传", "西游记", "红楼梦", "三国演义"]
dict3 = {x: list2[list1.index(x)] for x in list1 }
print(dict3)
dict4 = {list1[x]: list2[x] for x in range(len(list1))}
print(dict3)

# zip() 打包, 将多个可迭代对象(序列)中的相同索引值的元素, 放在一个元组里, 最终将所有的元组组成一个新的可迭代对象
dict5 = {k: v for k, v in zip(list1, list2)}  # [(施耐庵, 水浒传) (吴承恩,西游记) (曹雪芹,红楼梦) (罗贯中,三国演义)]
print(dict5)

  3、集合推导式

    集合推导式和列表推导式很相似, 唯一的区别就是用{}代替[]

    (1)语法结构

      ①set = {表达式 for item in 容器}
      ②set = {表达式 for item in 容器 if 条件}
      ③set = {表达式 for item1 in 容器1 for item2 in 容器2}

    (2)特点:自动去重功能

list1 = [9, 8, 7, -2, 2, -3, -7, 9]
# 使用集合推导式 推导出一个集合 集合中的元素是list1中元素的平方
set1 = {x ** 2 for x in list1}
print(set1) # {64, 4, 9, 81, 49}

相关推荐