zoukankan      html  css  js  c++  java
  • python基础----列表生成式、生成器表达式

    结论:

    1.把列表解析的[]换成()得到的就是生成器表达式

    2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

    3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如, sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:

    sum(x ** 2 for x in xrange(4))

    而不用多此一举的先构造一个列表:

    sum([x ** 2 for x in xrange(4)]) 

     ♥♥♥。◕‿◕。♥♥♥

    一、列表生成式

    1 #三元表达式
    2 name='alex'
    3 name='egon'
    4 
    5 res='SB' if name == 'alex' else 'shuai'
    6 print(res)
    1 #例子1
    2 egg_list=[]
    3 
    4 for i in range(100):
    5     egg_list.append('egg%s' %i)
    6 print(egg_list)
    7 
    8 l=['egg%s' %i for i in range(100) if i > 50]
    9 print(l)
     1 #例子2
     2 l=[1,2,3,4]
     3 s='hello'
     4 
     5 l1=[(num,s1) for num in l if num > 2 for s1 in s]
     6 print(l1)
     7 
     8 l1=[]
     9 for num in l:
    10     for s1 in s:
    11         t=(num,s1)
    12         l1.append(t)
    13 print(l1)
     1 #例子3
     2 import os
     3 g=os.walk('C:\egon')
     4 file_path_list=[]
     5 for i in g:
     6     # print(i)
     7     for j in i[-1]:
     8         file_path_list.append('%s\%s' %(i[0],j))
     9 
    10 print(file_path_list)
    11 
    12 g=os.walk('C:\egon')
    13 l1=['%s\%s' %(i[0],j) for i in g for j in i[-1]]
    14 print(l1)

    二、生成器表达式

     1 #例子1
     2 l=['egg%s' %i for i in range(100)]
     3 print(l)
     4 
     5 g=l=('egg%s' %i for i in range(10000))
     6 print(g)
     7 print(next(g))
     8 print(next(g))
     9 for i in g:
    10     print(i)
     1 #例子2
     2 f=open('a.txt')
     3 l=[]
     4 for line in f:
     5     line=line.strip()
     6     l.append(line)
     7 
     8 print(l)
     9 f.seek(0)
    10 l1=[line.strip() for line in f]
    11 print(l1)
    12 
    13 f.seek(0)
    14 g=(line.strip() for line in f)
    15 print(g)
    16 print(next(g))
     1 #例子3
     2 f=open('a.txt')
     3 g=(line.strip() for line in f)
     4 
     5 l=list(g)
     6 print(l)
     7 
     8 nums_g=(i for i in range(3))
     9 
    10 # print(sum([1,2,3,4]))
    11 print(sum(nums_g))
     1 #例子4
     2 money_l=[]
     3 with open('b.txt') as f:
     4     for line in f:
     5         goods=line.split()
     6         res=float(goods[-1])*float(goods[-2])
     7         money_l.append(res)
     8 print(money_l)
     9 
    10 f=open('b.txt')
    11 g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)
    12 
    13 print(sum(g))
    14 
    15 with open('b.txt') as f:
    16     print(sum((float(line.split()[-1])*float(line.split()[-2]) for line in f)))
     1 #例子5
     2 res=[]
     3 with open('b.txt') as f:
     4     for line in f:
     5         # print(line)
     6         l=line.split()
     7         # print(l)
     8         d={}
     9         d['name']=l[0]
    10         d['price']=l[1]
    11         d['count']=l[2]
    12         res.append(d)
    13 print(res)

      

  • 相关阅读:
    无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)
    撤销重做功能实现
    疯狂值班表(人员跟日期生成的视图)
    从零开始---控制台用c写俄罗斯方块游戏(2)
    unity3d关于碰撞问题
    主进程和服务进程通信调用Acrobat.AcroPDDoc时出现的问题
    echarts
    Wpf DataGrid动态添加列,行数据(二)
    Wpf DataGrid动态添加列,行数据(一)
    wpf学习资料链接(做记录)
  • 原文地址:https://www.cnblogs.com/wangyongsong/p/6700210.html
Copyright © 2011-2022 走看看