• 列表解析与生成器表达式


    列表解析与生成器表达式

      列表推导式:  

    egg_list=[]
    
    for i in range(100):
        egg_list.append('egg%s' %i)
    print(egg_list)
    
    
    l=['egg%s' %i for i in range(100) if i > 50]
    print(l)

      在一个列表中 [ ] ,将for的循环写在列表的右侧。[ for i in rang(100) ] ,将for循环的子代码写在左边, [ 'num%s' %i for i in rang(100) ]。就是列表推导式的写法。

      在列表里也是可以加 if 判断的。

      列表推导式的语法:

      [ expression for item1 in iterable1 if condition1

                    for item2 in iterable2 if condition2

            ...

            for itemN in iterableN if conditionN

         ]

      

      类似于:

      res =  [ ] 

      for item1 in iterable1:

        if condition1:

          for item2 in iterable2:

            if condition2:

              ...

              for itemN in iterableN:

                if conditionN:

                  res.append(expression)

    优点:方便,改变了编程习惯。是声明式编程。

    用处:

    l=[1,2,3,4]
    s='hello'
    #
    # l1=[(num,s1) for num in l if num > 2 for s1 in s]
    # print(l1)
    
    # l1=[]
    # for num in l:
    #     for s1 in s:
    #         t=(num,s1)
    #         l1.append(t)
    # print(l1)
    # import os
    # g=os.walk('C:\George')
    # file_path_list=[]
    # for i in g:
    #     # print(i)
    #     for j in i[-1]:
    #         file_path_list.append('%s\%s' %(i[0],j))
    #
    # print(file_path_list)
    #
    # g=os.walk('C:\George')
    # l1=['%s\%s' %(i[0],j) for i in g for j in i[-1]]
    # print(l1)

    生成器表达式:

      将列表的 [ ] 换为( )。即可用next,一次一个的取出下一个值。

    #
    # l=['egg%s' %i for i in range(100)]
    # print(l)
    
    # g=l=('egg%s' %i for i in range(1000000000000000000000000000000000000))
    # print(g)
    # print(next(g))
    # print(next(g))
    # for i in g:
    #     print(i)

      生成器表达式的语法:

      与列表推导式的区别在于一个是 [ ] ,一个是( )。

    ( expression for item1 in iterable1 if condition1

                    for item2 in iterable2 if condition2

            ...

            for itemN in iterableN if conditionN

         )

      生成器表达式的优点: 省内存,一个只生产一个值在内存中。

      生成器表达式的应用:读取一个大文件的所有内容。并且处理行。   

    f = open('a.txt')
    g = (line.strip() for line in f) #去除文件中的每一行的空格。
    list(g)    #因为g可以迭代。所以可以转成列表。
    # f=open('a.txt')
    # l=[]
    # for line in f:
    #     line=line.strip()     #弊端,在用大量内存空间。
    #     l.append(line)

    列表表达式和生成器表达式的作用:

      用来进行声明是编程。

     b.txt 文件   

    apple 10 3
    tesla 1000000 1
    mac 3000 2
    lenovo 30000 3
    chicken 10 3

    计算b.txt 文件里的每一类的商品的总价钱。

    # money_l=[]
    # with open('b.txt') as f:
    #     for line in f:
    #         goods=line.split()
    #         res=float(goods[-1])*float(goods[-2])
    #         money_l.append(res)
    # print(money_l)
    
    #
    # f=open('b.txt')
    # g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)
    #
    # print(sum(g))
    
    # with open('b.txt') as f:
    #     print(sum((float(line.split()[-1])*float(line.split()[-2]) for line in f)))
    # with open('b.txt') as f:
    #     res=(line.split() for line in f)
    #     print(res)
    #     dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res)
    #     print(dic_g)
    #     apple_dic=next(dic_g)
    #     print(apple_dic['count'])
    
    
    # apple_dict=next(dic_g)
    # print(apple_dict)
    #取出单价>10000
    with open('b.txt') as f:
        res=(line.split() for line in f)
        # print(res)
        dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res if float(i[1]) > 10000)
        print(dic_g)
        print(list(dic_g))
        # for  i in dic_g:
        #     print(i)
  • 相关阅读:
    request转换为java bean
    idea中快捷键
    idea中Terminal显示中文乱码
    idea解决tomcat控制台中文乱码问题
    需要看的url
    常用网站
    反射
    5、运算符
    4、变量
    2、Hello Word讲解
  • 原文地址:https://www.cnblogs.com/george92/p/9131857.html
Copyright © 2020-2023  润新知