• 三元表达式,列表解析和生成器表达式


    三元表达式

    在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子

    if x > y:
        print("the max is x")
    else:
        print("the max is y")
    

    三元表达式的语法为:

    True if expression else False
    

    现在可以个体三元表达式来完成这种比较简单的判断

    res = x if x > y else y
    print(res)
    

    列表解析

    列表解析的语法格式为

    [ i操作 for i in 列表 if 表达式1 and 表达式2]
    
    • 其中if判断语句是可选语句,可以对列表的元素进行操作

    现在有这样一个需求,把一个数字列表中的每个值都取平方,把一个列表中的每个字符串都转换为大写形式

    可以这样写

    l1 = range(1, 10, 2)
    l2 = []
    for i in l1:
        l2.append(i**2)
    
    l3 = ['python', 'linux', 'javascript', 'mysql']
    l4 = []
    for j in l3:
        j = j.upper()
        l4.append(j)
    
    print(l2)
    print(l4)
    

    那有没有简单的方式呢,可以使用列表解析,上面的例子则可以修改为

    l1 = range(1, 10, 2)
    l2 = [i**2 for i in l1]
    
    l3 = ['python', 'linux', 'javascript', 'mysql']
    l4 = [j.upper() for j in l3]
    
    print(l2)
    print(l4)
    

    生成器表达式

    列表解析得到的结果仍然是一个列表,列表解析的优点是:取值方便
    缺点:很占系统资源,如果列表的长度较小时使用列表解析会很方便,但是如果列表的长度很大的时候,使用列表解析会占用很多的内存资源,此时可以使用生成器表达式来节省内存资源
    来看下面的例子

    res = ( i**2 for i in range(100))
    print(res)
    

    得到的结果为

    <generator object <genexpr> at 0x0000000002DA1AF0>
    

    在上面的例子里,把列表解析表达式中的中括号换成小括号,那么表达式执行结果就变成了一个生成器

    我们知道,生成器的本质就是迭代器,所以上面的表达式执行的结果生成器,可以使用for 循环来取值

    res = ( i**2 for i in range(100))
    
    for i in res:
        print(i)
  • 相关阅读:
    判断一张view 是否被加载过用 nil == view.superview
    oracle9i新增sql命令merge
    Windows平台个人常用软件推荐
    ASPxSpinEdit高度无法控件的解决办法
    Oracle编码约定
    宾克斯的酒 
    “dcom项目无属性”的解决方法
    安装VS2005后找不到工具箱的解决办法
    奇怪问题一个
    Oracle临时表空间不够,导致查询出错。
  • 原文地址:https://www.cnblogs.com/renpingsheng/p/8641989.html
Copyright © 2020-2023  润新知