zoukankan      html  css  js  c++  java
  • Python if else简洁写法,列表推导式,三目运算符写法

    https://www.cnblogs.com/xiexiaoxiao/p/7772441.html

    https://blog.csdn.net/su_bao/article/details/81484483

    https://blog.csdn.net/leavemetomorrow/article/details/90641362

    1. 当只有 if 时,列表生成式构造为 [最终表达式 - (范围选择 - 范围过滤)]

    >>> [num ** 2 for num in range(10) if num % 2 == 0]
    [0, 4, 16, 36, 64]
    如果 if 和 for 的位置调换,则会报错。

    >>> [num ** 2 if num % 2 == 0 for num in range(10)]
    File "<stdin>", line 1
    [num ** 2 if num % 2 == 0 for num in range(10)]
    ^
    SyntaxError: invalid syntax
    2. 当同时有 if 和 else 时,列表生成式构造为 [最终表达式 - 条件分支判断 - 范围选择]

    >>> [num ** 2 if num % 2 == 0 else 0 for num in range(10)]
    [0, 0, 4, 0, 16, 0, 36, 0, 64, 0]
    如何 if 和 for 的位置调换,则会报错。

    >>> [num **2 for num in range(10) if num % 2 == 0 else 0]
    File "<stdin>", line 1
    [num **2 for num in range(10) if num % 2 == 0 else 0]
    ^
    SyntaxError: invalid syntax
    官方文档并没有提及到这个。我就说一下我的理解方法。

    1,python解释器看到列表生成式会先找关键字 for,for 后面的部分是为了筛选需要显示的数字,for 前面的表达式则是对这些数字进行进一步加工。

    2,当只有 if 而没有 else 时,此时迭代器 range 里面的元素会被筛选,只有偶数才会进行下一步操作;筛选好之后,再进行平方操作。这里if的作用是为了筛选。

    3, 当同时有 if 和 else 时,此时迭代器中的所有元素都将会在下一步被处理,然后就是偶数的进行平方,奇数的显示为0。这里 if 和 else 的作用则是为了进行不同条件下的处理。

    因写多了判断语句,看着短短的代码却占据来好几行,于是便搜下if-else简洁的写法,结果也是发现新大陆

    4种:

    第1种:__就是普通写法

    复制代码
    a, b, c = 1, 2, 3
    if a>b:
    
        c = a
    
    else:
    
        c = b
    复制代码

    第二种:一行表达式,为真时放if前

    c = a if a>b else b

    第三种:二维列表,利用大小判断的0,1当作索引

    c= [b, a][a > b]

     第四种:传说中的黑客,利用逻辑运算符进行操作,都是最简单的东西,却发挥无限能量啊

    c = (a>b and [a] or [b])[0]
    # 改编版
    c = (a>b and a or b)

    第四种最有意思了,

    利用and 的特点,若and前位置为假则直接判断为假。

    利用 or的特点,若or前位置为真则判断为真。

    复制代码
    # 从前往后找,and找假,or找真
    # 前真返后,
    print(111 and 222)  # 222
    # 前假返前
    print(0 and 333)  #0
    
    # 若x真【x】, x假,y真【y】,xy假【y】,只有前真返回前
    print(111 or 222) #111
    print(0 or 222) #222
    print('' or 0) # 0
    复制代码
    对于c = (a>b and a or b)而言,
    若(a>b and a)
      真:a >b and a,
        则a > b 为真
      假:b,
        则 a> b为假

     补充:对于and的理解

    复制代码
    id_ = '12345'
    # 判断长度为5或者为8
    if len(id_) == 5 or len(id_) == 8:
        print(id_, '------')
    # 相反的表达为非5且非8
    if len(id_) != 5 and len(id_) != 8:
        print(id_, '+++++++')
  • 相关阅读:
    mac 监控文件变化并重启php
    关闭某个命令的进程
    debian 添加永久环境变量方法
    debian swoole环境
    swoole 编程环境安装
    计算机网络知识笔记
    Mac 配置 php-fpm
    存储过程 利用游标 解决复制业务
    ubuntu 宝塔安装一条龙服务
    项目重零开始搭建
  • 原文地址:https://www.cnblogs.com/focus-z/p/12311136.html
Copyright © 2011-2022 走看看