zoukankan      html  css  js  c++  java
  • 【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循环遍历出容器的元素, 将元素应用到表达式中组成新列表中的元素

     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}
  • 相关阅读:
    【转载】 miniImageNet数据集介绍
    【转载】 聊聊统计学里的置信度和置信区间
    小样本学习(Few shot learning)标准数据集(miniImageNet、tieredImageNet、FewshotCIFAR100)下载地址
    配色素描必备书籍分享
    Jq滚动条插件写法(二)
    获得样式属性和外联样式
    windows7下gvim多标签打开新文件
    JQ插件jkscroll应用到页面中的效果
    《精通javascript》几个简单的函数(一)
    事件冒泡
  • 原文地址:https://www.cnblogs.com/Tree0108/p/12110191.html
Copyright © 2011-2022 走看看