列表生成器:  即List Comprehensions。 在python中,可通过内置的强大有简单的生成式来创建列表。例如创建一个1到10的列表list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  可以用list=[x for x in range(1,11)]直接实现

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

 L = []
for x in range(1, 11):
L.append(x * x) L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是,运用列表生成式,可以写出非常简洁的代码  list=[x*x  for x in range(1,11)]

生成器:

通过列表生成式,我们可以创建一个列表,但是,由于受到内存的限制,列表的容量是有限的,而且;创建一个包含100万个元素的列表,不仅占用很大的内存空间,如果我们仅仅需要访问前面几个元素,那后边的绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断的推算出后面的元素那?这样就不必创建完整的列表,从而节省大量的空间。在python中,这种一遍循环,一遍计算的机制,成为生成器:generator

创建生成器的方法1:只需把一个列表的[]改成() list = (x*2 for x in range(10))   next(list) 执行一次生成一个,一次只生成一个

创建生成器的方法2:用函数实现(当for循环无法实现的时候),比如:斐波那契数列

斐波拉契数列:除第一个第二个数外,任何一个数都是由前两位数相加得到。 1,1,2,3,5……

加上yield的函数就变成了列表生成式,不再是函数,变成了生成器,生成一个对象,需要变量接受

Yield有两个功能:停止函数,返回yield后面的那个值

                     

Send和next都可以让生成器(yield)继续执行,但是send可以放一个参数,__next__不能,send传的参数就是yield表达式的结果  第一次使用send带的参数必须为None或者使用__next__方法

yield多任务处理 :      

迭代器:

迭代器: 在上一个数值的基础上进行下一个数值(在原有基础上开发新的) 循环就是迭代

可迭代对象:一类是集合数据类型:list tuple,dict ,set, str等

另一类是generator,包括生成器和带yield的genarator function

这些可用于for循环的对象统称为可迭代对象:iterable

用isinstance()判断对象是否为迭代对象(iterable)

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

python中的生成器,迭代器及列表生成式的更多相关文章

  1. python中的生成器和迭代器

    前言: 我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. 定义: 生成器和迭代器 通过列表生成式,我们可以直接创建一个列 ...

  2. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  3. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

  4. Python中多使用迭代器

    英文原文出处:Use More Iterators 本文介绍将代码转换为使用迭代器的原因和实用技巧. 我最喜欢的Python语言的特色之一是生成器,它们是非常有用的,然而当阅读开源代码时,我很少遇到它 ...

  5. python中的几种遍历列表的方法比较

    python的内容非常丰富,给我们带来的便利很多,很多事情的表达方法有很大的多样性,比如我经常需要遍历一个列表,取它的下标和值,这个时候就有很多方法需要取舍一下才行. for循环遍历 l = [1,2 ...

  6. Python学习-39.Python中的生成器

    先回顾列表解释 lista = range(10) listb = [elem * elem for elem in lista] 那么listb就将会是0至9的二次方. 现在有这么一个需求,需要存储 ...

  7. python中的生成器函数是如何工作的?

    以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...

  8. python中的生成器(二)

    一. 剖析一下生成器对象 先看一个简单的例子,我们创建一个生成器函数,然后生成一个生成器对象 def gen(): print('start ..') for i in range(3): yield ...

  9. 在Python中使用lambda高效操作列表的教程

    在Python中使用lambda高效操作列表的教程 这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map.filter.reduce.sorted等函数,需要的朋友可 ...

随机推荐

  1. 【NX二次开发】多种变换

    变换的种类: uf5942 矩阵乘积变换 uf5943 平移变换 uf5944 缩放变换 uf5945 旋转变换 uf5946 镜像变换 最后使用 uf5947 实现uf5942-uf5946的变换. ...

  2. 这应该是把Java内存区域讲的最清楚的一篇文章

    基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: ...

  3. NOIP模拟测试4「礼物·通讯·奇袭」

    礼物. 首先见到期望一定要想dp,看到n的范围无脑想状压, 然后我就只想到这了. dp方程式还是比较好想的,但是我依然想不出来 略经思考   颓题解 依然不会,随便写了个式子 i状态中不含j $f[i ...

  4. Map类型的Json格式

    示例代码: Map<String, Object> map = new HashMap<>();// boolean 类型 map.put("boolean" ...

  5. JS 使用try catch捕获异常

    JS 使用try catch捕获异常 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 前端是攻克客户的先锋,需要特别注意到 ...

  6. 利用ONT测序检测真核生物全基因组甲基化状态

    摘要 甲基化在真核生物基因组序列中广泛存在,其中5mC最为普遍,在真核生物基因组中也有发现6mA.捕获基因组中的甲基化状态的常用技术是全基因组甲基化测序(WGBS)和简化甲基化测序(RRBS),而随着 ...

  7. 对象池技术和通用实现GenericObjectPool

    对象池技术其实蛮常见的,比如线程池.数据库连接池 他们的特点是:对象创建代价较高.比较消耗资源.比较耗时: 比如 mysql数据库连接建立就要先建立 tcp三次握手.发送用户名/密码.进行身份校验.权 ...

  8. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

  9. Java on Visual Studio Code的更新 – 2021年6月

    Nick Zhu from Microsoft VS Code Java Team 大家好,欢迎来到 Visual Studio Code Java 更新的特别年中版.作为这篇文章的重点,我们将看看接 ...

  10. STP、生成树的算法

    STP.生成树的算法       一.STP        1)STP概述        2)交换网络环路的产生        3)STP简介        4)STP的工作原理        5)S ...