飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3039|回复: 7

[Python] 列表推导式-Python

[复制链接]
  • TA的每日心情
    开心
    2024-5-27 23:24
  • 签到天数: 300 天

    [LV.8]以坛为家I

    发表于 2023-3-9 13:29:29 | 显示全部楼层 |阅读模式
    [Python] 纯文本查看 复制代码
    # 列表推导式可以使用复杂的表达式和嵌套函数
    from math import pi
    print([str(round(pi,i)) for i in range(1,6)])

    [Python] 纯文本查看 复制代码
    # 普通的列表推导式
    list1 = [x for x in range(10)]
    print(list1)

    [Python] 纯文本查看 复制代码
    # 嵌套的列表推导式 
    # 列表推导式中的初始推导式可以是任何表达式 甚至可以是另外的列表推导式
    list2 = [[x for x in range(10)] for y in range(3)]
    print(list2)

    [Python] 纯文本查看 复制代码
    # 现在 先定义一个3x4的矩阵 由三个长度为四的列表组成
     
    n = [
        [1,2,3,4],
        [5,6,7,8],
        [9,10,11,12]
    ]
     
    # 用列表推导式将n里面所有的元素给遍历 items1和items2这两者保存的值是一样的是相等的
    items1 = [row[i] for row in n for i in range(4)]
    items2 = [i for row in n for i in row]
    print(items1)
    print(items2)
    print(n)

    [Python] 纯文本查看 复制代码
    # 转置列表的行列 之前是 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 这种样子 现在变成这种 [[1,5,9],[2,6,10],[3,7,11],[4,8,12]] 样子
    # 在 [row[i] for row in n for i in range(4)] 中 首先 for循环遍历行 然后遍历列所对应的索引 列表推导式生成的数字的顺序和原始列表的数字的顺序是一样的
    # 我们遍历列表中的所有行的其中某一列 先用for循环遍历可迭代对象range 每次遍历可迭代对象range 变量i都会更新值 可迭代对象range的范围是列表中的行的长度 
    # 然后再遍历行 每次遍历行 都会产生行中的某一列 也可以这样说 先遍历行中某一列所对应的索引 然后再遍历每一行 生成的值是每一行中的某一列 在列表推导式中 前面的
    # 表达式基于后面的for循环求值 我们改写 [row[i] for row in n for i in range(4)] 使其变成 [[row[i] for row in n] for i in range(4)] 这样 就可以转置行列了
    # 感觉有点难以表述 在n中 有3个列表 每个列表的长度为4 每个列表有4个元素 3个列表的元素数目是相等的 用for循环遍历range可迭代对象 使其产生的数字序列中的数字个数和
    # 每个列表中的元素数目相同 而且可迭代对象range每次产生的数字对应列表中的某一列 for i in range(4)的前面是列表推导式 每次产生的列表 其值涵盖每一行中某一列 这个某一列是由i决定的
     
    n = [
        [1,2,3,4],
        [5,6,7,8],
        [9,10,11,12]
    ]
     
    items1_1 = [[row[i] for row in n] for i in range(4)]
    print(items1_1)
     
    # 也可以这样写 
    list1 = []
    for i in range(4):
        list1.append([j[i] for j in n])
    print(list1)
     
    # 还可以这样写
    list1 = []
    for i in range(4):
        list2 = []
        for v in n:
            list2.append(v[i])
        list1.append(list2)
     
    print(list1)

    [Python] 纯文本查看 复制代码
    n = [
        [1,2,3,4],
        [5,6,7,8],
        [9,10,11,12]
    ]
     
    # Python官方文档应该是这样说的 在实际的应用中 最好用内置函数代替复杂的流程语句 所以在这里 我使用了zip()函数 来完成列表的转置
    # zip()函数 将多个序列组成的可迭代对象作为参数 将序列中的元素按照对应的位置重新组合 打包成一个个的元组 然后返回由这些元组组成的列表 具体的返回值是一个对象地址
    # *操作符用于将列表拆解 list()函数用于展开列表  
    print(list((zip(*n))))
     
    [([1, 2, 3, 4],), ([5, 6, 7, 8],), ([9, 10, 11],)]
    [(1, 5, 9), (2, 6, 10), (3, 7, 11)]



    评分

    参与人数 1威望 +1 飘云币 +1 收起 理由
    LuckyClover + 1 + 1 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 16:52
  • 签到天数: 794 天

    [LV.10]以坛为家III

    发表于 2023-3-9 23:34:44 | 显示全部楼层
    进来顶一下,哈哈

    点评

    非常感谢 嘿嘿  详情 回复 发表于 2023-3-10 09:49
    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    难过
    5 天前
  • 签到天数: 661 天

    [LV.9]以坛为家II

    发表于 2023-3-10 09:17:38 | 显示全部楼层
    这个功能很强大

    点评

    我本人很少用到这个功能  详情 回复 发表于 2023-3-10 09:50
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-27 23:24
  • 签到天数: 300 天

    [LV.8]以坛为家I

     楼主| 发表于 2023-3-10 09:49:52 | 显示全部楼层
    LuckyClover 发表于 2023-3-9 23:34
    进来顶一下,哈哈
    非常感谢 嘿嘿
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-27 23:24
  • 签到天数: 300 天

    [LV.8]以坛为家I

     楼主| 发表于 2023-3-10 09:50:30 | 显示全部楼层
    乐活 发表于 2023-3-10 09:17
    这个功能很强大

    我本人很少用到这个功能
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-15 13:29
  • 签到天数: 192 天

    [LV.7]常住居民III

    发表于 2023-3-10 13:10:12 | 显示全部楼层
    充电中,学习了

    点评

    要充电 也要放电  详情 回复 发表于 2023-3-10 15:36
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-27 23:24
  • 签到天数: 300 天

    [LV.8]以坛为家I

     楼主| 发表于 2023-3-10 15:36:56 | 显示全部楼层

    要充电 也要放电
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    前天 08:13
  • 签到天数: 2229 天

    [LV.Master]伴坛终老

    发表于 2023-3-17 23:36:25 | 显示全部楼层
    进来学习学习,感谢楼主分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表