结论:

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

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

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

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

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

  1. 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)

  

python基础----列表生成式、生成器表达式的更多相关文章

  1. python 基础 列表生成式 生成器

    列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...

  2. python协程函数应用 列表生成式 生成器表达式

    协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...

  3. python基础——列表生成式

    python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...

  4. Py修行路 python基础 (十二) 协程函数应用 列表生成式 生成器表达式

    一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了 ...

  5. Python基础-列表生成式和生成器表达式

    一.列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list ...

  6. python之列表和生成器表达式篇

    一.协程函数的应用 写一个装饰器用于让协程函数不需要输入再执行一次next()函数 分析: 在装饰器中生成该协程函数的生成器, 并且执行一次next()函数 def firstNext(func): ...

  7. 列表生成式&生成器表达式

    一.列表生成式 def func(): return [lambda x:i*x for i in range(4)] print([j(2) for j in func()]) 结果:[6,6,6, ...

  8. python 基础 列表生成式

    data = {'a':'abc';'b':'bac','c':'cba'} [v for k,v in data] 结果 ['abc','bca','cba'] 格式 [x for x in  内容 ...

  9. Python之列表生成式、生成器、可迭代对象与迭代器

    本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...

随机推荐

  1. Qt creator 最常用的13个快捷键

    alt +enter // 自动创建类的定义 F1 // 查看帮助,文档 F2 // 快速到变量声明 Shift + F2 // 函数的声明和定义之间快速切换 F4 // 在 cpp 和 h 文件切换 ...

  2. 3星|《十大全球CEO亲授企业高速成长的关键战略》:作为CEO,我也非常坦率地表明过家庭优先于工作

    十大全球CEO亲授 企业高速成长的关键战略(<哈佛商业评论>增刊) <哈佛商业评论>上的10来篇文章合集.大部分都看过,除了一篇中信的访谈,其他大部分是美国的有点旧的案例. 总 ...

  3. Halcon如何保存仿射变换矩阵

    这里我们通过序列化来实现的,如下图,写到硬盘的HomMat2D_1内容和从硬盘里HomMat2D_2读出的内容一致,源代码在图片下方. Halcon源代码: hom_mat2d_identity (H ...

  4. 算法笔记(c++)--求一个数的所有质数因子

    算法笔记(c++)--求一个数的所有质数因子 先贴题目: 这题不难,恶心在理解上面.最后看评论知道了怎么回事: 2*2*3*3*5=180 按照这逻辑的话应该输入的数由一系列质数相乘出来,所以每次找到 ...

  5. 亚马逊:PS4和Xbox One实在太火

    圣诞节刚刚结束,当实体零售商在抱怨坑爹的天气让自己节日生意变得冷清的同时,在线零售商们却依旧赚的盆满钵满. 亚马逊近日表示,今年节日期间的零售工作非常不错,新一代游戏机更是最大的亮点.据销售统计,在圣 ...

  6. c++ Dynamic Memory (part 1)

    1. make_shared<T>(args): return a shared_ptr dynamically allocated object of type T. Use args ...

  7. python request 获取cookies value值的方法

    import requests res = requests.get(url) cookies = requests.utils.dict_from_cookiejar(res.cookies) pr ...

  8. OOP 2.2 构造函数

    1.概念 成员函数的一种 名字与类名相同,可以有参数,没有返回值(void也不行) 作用:对对象进行初始化,如给成员函数赋初始值 如果定义时没有构造函数,则编译器生成一个默认无参数的构造函数 默认构造 ...

  9. CodeForces 154A Hometask dp

    题目链接: http://codeforces.com/problemset/problem/154/A 题意: 给你一个字符串,和若干模板串(长度为2),至少删除多少个字母,使得字符串的字串里面没有 ...

  10. IT小小鸟读后感言

    有感 读了我是一只IT小小鸟之后, 我发现上大学得靠自己自学,确定自己的目标和方向,多去参与实验和自己多锻炼编写程序.我现在大一,还有很多时间来让自己变得更好,虽然要补考两门课程,但是还是不要失去信心 ...