• python3进阶之推导式1之列表(list)推导式(comprehensions)


    1.前言

            推导式,英文名字叫comprehensions,注意与comprehension(理解)只有s字母之差。推导式又可以叫解析式,推导式可以从一种数据序列构建新的数据序列的结构体。推导式分为,列表推导式,字典推导式,嵌套列表推导式,本节介绍列表推导式,其他后续介绍.

    2.列表推导式概念

             它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,是另一个新列表,原列表保持不变。在这个以iffor语句为上下文的表达式运行完成之后产生。

    写法模式:[expr for value in collection if condition]

    if过滤条件,取决于实际应用是否需要,可有可无

    3.实例:

    示例1:

    #输出30以内被4整除的数,各自加0.5
    list1=[i+0.5for i in range(30)if i%4==0]
    print(list1)
    # [0.5, 4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5]

    对比for循环代码为:
    list2=[]
    for i in range(30):
    if i%4==0:
    list2.append(i+0.5)
    print(list2)
    # [0.5, 4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5]

    示例2:

    # 将列表中长度大于4的字母大写,长度小于或等于4的字母小写
    name1= ['Bob','tom','alice','Jerry','Wendy','Smith','liuhu']
    name2=[name.upper() for name in name1 if len(name)>4]
    print(name2)
    name3=[name.lower() for name in name1 if len(name)<=4]
    print(name3)
    name4=name2.extend(name3)
    print(name4)
    print(name2)
    # ['ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU']
    # ['bob', 'tom']
    # None
    # ['ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU', 'bob', 'tom']
    注意:name4为空,写法需要更正

    还有更简单的方法,在列表推导式中使用if else语句:
    name5= ['Bob','tom','alice','Jerry','Wendy','Smith','liuhu']
    name6=[name.upper()if len(name)>4 else name.lower() for name in name5]
    print(name6)
    # ['bob', 'tom', 'ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU']

    示例3:
    # 与zip结合
    a = [ -6, -7, -8, -9, -10]
    b = [1, 2, 3, 4, 5]
    xy = [[x, y] for x, y in zip(a, b)]
    print(xy)
    # [[-6, 1], [-7, 2], [-8, 3], [-9, 4], [-10, 5]]

    示例4:
    # 支持多层for循环,将一个嵌套列表转换成一个一维列表。
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    b = [j for i in a for j in i]
    print(b)
    # [1, 2, 3, 4, 5, 6, 7, 8, 9]

    示例5:
    m,n中矩阵元素的乘积玩法;
    m = [[1,2,3],[4,5,6],[7,8,9]]
    n = [[2,2,2],[3,3,3],[4,4,4]]
    # 矩阵行与行相乘
    hc=[m[row][col]*n[row][col] for row in range(3) for col in range(3)]
    print(hc)
    # [2, 4, 6, 12, 15, 18, 28, 32, 36]

    # 矩阵相乘
    jc=[[m[row][col]*n[row][col] for col in range(3)] for row in range(3)]
    print(jc)
    # [[2, 4, 6], [12, 15, 18], [28, 32, 36]]

    # 矩阵列与列乘
    lc=[[m[row][col]*n[row][col] for row in range(3)] for col in range(3)]
    print(lc)
    # [[2, 12, 28], [4, 15, 32], [6, 18, 36]]
     
    仙衣眠云碧岚袍,一襟潇洒,两袖飘飘。玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
  • 相关阅读:
    2016华为实习编程题:停车管理系统
    lintcode:单词切分
    2016网易实习生编程题:数组中两个数的和等于sum
    2016网易实习生编程题:n个骰子的和等于m
    2016百度编程题:钓鱼比赛
    2016百度编程题:裁减网格纸
    2016百度编程题:罪犯转移
    JAVA面试基础
    扔硬币问题
    随机数生成随机数
  • 原文地址:https://www.cnblogs.com/max520liuhu/p/8900898.html
Copyright © 2020-2023  润新知