• 列表生成式&三元表达式


    列表生成式: 用于生成一个新的列表,是Python内置的一种极其强大的生成list的表达式。
    一、语法格式:[exp for iter_var in iterable]

    工作过程:

    (1)迭代iterable中的每个元素;

    (2)每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值;

    (3)最后把所有通过exp得到的计算值以一个新列表的形式返回。

    例如:

    L=[i for i in range(10)]
    print(L)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    R=[]
    for a in range(10):
        R.append(a)
    print(R)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    二、嵌套if语句:[exp for iter_var in iterable if_exp]

    工作过程:

    (1)迭代iterable中的每个元素,每次迭代都先判断if_exp表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;

    (2)把迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;

    (3)最后把所有通过exp得到的计算值以一个新列表的形式返回。

    res=[x for x in range(1,10) if x%2==0]
    print(res)#[2, 4, 6, 8]
    res=[x*x for x in range(1,10) if x%2==0]
    print(res)#[4, 16, 36, 64]

    三、循环嵌套语法格式:[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

    工作过程:每迭代iterable_A中的一个元素,就把ierable_B中的所有元素都迭代一遍。

    res= [(x, y) for x in range(3) for y in range(4)]
    print(res)#[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
    res=[ x+y for x in range(3) for y in range(4)]
    print(res)#[0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5]

    四、循环嵌套加判断

    res=[m + n for m in range(1,10) for n in range(1,5) if m%2==0]
    print(res)#[3, 4, 5, 6, 5, 6, 7, 8, 7, 8, 9, 10, 9, 10, 11, 12]

    备注:[]与()的区别

    l1 = [ i  for i in range(1,20,2) ]  #生成100以内的奇数,以空间换时间
    print(l1)  #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    l2 = ( i  for i in range(1,20,2) )  #生成100以内的奇数 #
    print(l2)  #<generator object <genexpr> at 0x0000000002255410>
    
     #外面是小括号的话,它就不是一个list了,它是一个生成器,
     #生成器比list要节省内存,它是每次循环的时候,会根据规则计算一个元素,放到内存里面
     #list它是把所有的元素都放在内存里面的

    小练习:

    #res = ['HWt' , 'Python' ,456, 'Random' , 'BEST' , 123] ,将list中得大写字符转为小写:
    res = ['HWt' , 'Python' ,456, 'Random' , 'BEST' , 123]
    print([s.lower() if isinstance(s , str) else s for s in res ]  )#['hwt', 'python', 456, 'random', 'best', 123]

    三元表达式:if...else 三元表达式: 可以简化分支判断语句,如 x = y.lower() if isinstance(y, str) else y

    # c = a if a > b else b  # 如果a大于b的话,c=a,否则c = b ,如果不用三元运算符的话,就得下面这么写
    if a > b:
        c = a
    else:
        c = b
    
    c = a if a > b else b  #三元表达式

    Python之列表生成式、生成器、可迭代对象与迭代器:https://www.cnblogs.com/yyds/p/6281453.html

     
  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/hwtfamily/p/8981532.html
Copyright © 2020-2023  润新知