美文网首页
Python三元表达式-列表解析-生成器表达式

Python三元表达式-列表解析-生成器表达式

作者: 断尾壁虎V | 来源:发表于2017-11-28 19:11 被阅读0次

    三元表达式

    三元表达式是if...else的简写版本:

    x=1
    y=2
    res=x if x>y else y   # 三元表达式,True则返回左边的值,False则返回右边的值
    print(res)
    

    列表解析

    列表解析用于快速生成列表,可以简洁代码:

    l=[i for i in range(10)]
    print(l)
    
    l=['book%s' %i for i in range(10) if i>5 if i<7]
    print(l)
    

    对旧的列表做计算处理,如计算平方:

    l=[1, 2, 3, 4, 5]
    l2=[items**2 for items in l if items**2 <16]
    print(l2)
    

    对列表的值做过滤:

    l=['book1','book2','book3','pc','iphone']
    l2=[i for i in l if i.startswith('book')]
    print(l2)
    

    生成器表达式

    生成器表达式主要用于生成一个迭代器,如:

    l=['book1','book2','book3','pc','iphone']
    l2=(i for i in l if i.startswith('book'))
    print(next(l2))
    print(next(l2))
    print(next(l2))
    

    将列表的中括号[]改为圆括号()就是一个生成器表达式。这主要用于处理大文件和无穷列表问题。
    如对文件内容进行遍历,查找出最长的一行的长度:

    with open('a.txt',encoding='utf-8') as f:
        g=max(len(i) for i in f)   # max函数内置next方法,可以遍历迭代器中值,有多层圆括号时,迭代生成器的括号可以省略
        print(g)
    

    可以直接计算列表和生成器的值:

    print(sum([1,2,3]))      # 对列表值求和
    print(sum(i for i in range(4)))     # 对生成器求和
    

    如对文件中相关数据进行求和操作:
    文件a.txt的内容为:

    a  100   5
    b  20     100
    c  5000  2
    d  10000  3
    

    如果第二列为单价,第三列为数量,求总金额:

    with open('a.txt',encoding='utf-8') as f:
        g=(float(i.split()[1])*int(i.split()[2]) for i in f)
        print(sum(g))
    

    同样是上面的文本内容,可以进行格式化,并完成筛选操作:

    with open('a.txt',encoding='utf-8') as f:
        g=[{'name':i.split()[0],'price':float(i.split()[1]),'count':int(i.split()[2])} for i in f if float(i.split()[1]) > 1000]
        print(g)
    

    输出结果:
    [{'name': 'c', 'price': 5000.0, 'count': 2}, {'name': 'd', 'price': 10000.0, 'count': 3}]

    相关文章

      网友评论

          本文标题:Python三元表达式-列表解析-生成器表达式

          本文链接:https://www.haomeiwen.com/subject/hndebxtx.html