python生成式、生成器和迭代器
列表生成式
生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。需要生成[1x1, 2x2, 3x3, ..., 10x10]
循环:
for x in range(1, 11):
L.append(x * x)
print(L)
但是循环太繁琐。
而列表生成式则可以用一行语句代替循环生成上面的list:
[x * x for x in range(1, 11)]
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来。
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
[x * x for x in range(1, 11) if x % 2 == 0]
还可以使用两层循环,可以生成全排列:
[m + n for m in 'ABC' for n in 'XYZ']
生成器(generator)
生成器和生成式最大的区别就是将[]替换为()
输出可迭代对象generator需要使用next方法
例子1
a = (x*x for x in xrange(10) if x*x%2 == 0)
print(type(a))
print(a.next())
print(a.next())
for i in a:
print(i)
#generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素为止
例子2
def fib(n):
sum = 0
i = 0
while(i<n):
sum = sum +i
i+=1
yield sum
for x in fib(10):
print(x)
print(type(fib(10)))
#结果和上面的结果是一样的,包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。每当遇到yield关键字的时候,你可以理解成函数的return语句,yield后面的值,就是返回的值。但是不像一般的函数在return后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效,下次从yield下面的部分开始执行。
迭代器
Iterable(可迭代对象) 和 Iterator(迭代器) 主要区别是 :
凡是可以用 for 循环的 都是 Iterable(可迭代对象) 凡是需要通过next()函数获得值的可迭代对象都是 Iterator(迭代器)。
(所以生成器可以 被next()函数调用并不断返回下一个值的对象称为迭代器 ) (可以简单理解为生成器 就是 迭代器的可迭代对象)
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
转载于:https://blog.51cto.com/culiangmianbao/1978883
python生成式、生成器和迭代器相关推荐
- [转载] Python中生成器和迭代器的区别
参考链接: Python迭代器 Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list.string.tuple.dict等这些容器对 ...
- Python的生成器和迭代器
Python生成器和迭代器 作者:王大为 时间:2016-10-24 11:00 一.生成器generator 分为以下两种: 1.列表生成器,形如:( i * i for i in range(10 ...
- python 面试生成器和迭代器_Python 中的迭代器与生成器
导读 这篇文章主要介绍了 python 当中的迭代器与生成器,在涉及到大数量的场景应该考虑使用迭代器与生成器. 原文链接: https://russellgao.cn/python-iter/ 可迭代 ...
- python迭代器创建序列_第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用...
本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...
- 彻底理解Python生成器和迭代器
目录 1.列表生成式 2.生成器 3.迭代器 4.对yield的总结 5.补充:itertools库学习 1.列表生成式 首先举个例子 现在有个需求,看列表 [0,1,2,3,4,5,6,7,8,9] ...
- Python生成器与迭代器详细教程
一.列表生成器 首先举个例子 现在有个需求,看列表 [0,1,2,3,4,5,6,7,8,9],要求你把列表里面的每个值加1,你怎么实现呢? 方法一(简单): info = [0, 1, 2, 3, ...
- Python高级特性:切片、迭代、列表生成式、生成器与迭代器
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...
- 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器
接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 1 #演示切片 2 k="abcdefghijklmnopqrstuvwxyz" 3 #取前5个元素 4 k[0:5 ...
- python 生成式,迭代器,生成器
DAY 6. 生成式,迭代器,生成器 6.1 生成式 6.1.1 列表生成式 list = [index for index in range(10)] 6.1.2 字典生成式 dict = {'zh ...
最新文章
- 计算机二级考试选择科目有级别,计算机二级考试该选哪一科目?
- [转]对贡献有激情,对回报有信心
- MySQL用source命令导入不记入binlog中【原创】
- WPF案例:如何设计历史记录查看UI
- python窗口动态实时显示时间_量化交易实时动态监视系统(纯Python,只需要浏览器就能用)-直接GitHub开源可下载...
- C#語法學習二(NameSpace)
- 什么是 Elasticsearch?一篇搞懂
- Candidate是什么
- 网络爬虫异常处理总结
- 阿里云禁止root用户直接登录的解决办法
- java中void是什么意思_JAVA里VOID是什么意思
- sql server XML中value(),exists(),nodes()方法
- tortoise set autocrlf convert
- 【初学者知识】了解一下BASIC语言
- 扫雷游戏软件测试,软件测试-扫雷游戏
- php时间戳 中文,PHP时间戳-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
- 【POJ No. 2431】 丛林探险 Expedition
- 使用java的milo框架访问OPCUA服务的方法
- 拿破仑最欣赏的数学家,师从拉格朗日,撕逼泊松,一生痴迷热学最后却死于热学...
- android 4.0 bluetooth bt HFP/HSP分析
热门文章
- python运算符括号_Python合集之Python运算符(四)
- kafka学习_《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ
- java图片转换成base64_Java将图片转换成Base64字符串
- python做的项目管理软件_幽雅的使用Python之软件管理
- 16进制与字符串之间的相互转换
- Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
- energy计算机电脑,energy management
- MySQL同表关联的id替换名称_MySQL JOIN用另一个表中的值替换ID
- Leetcode-520. 检测大写字母
- 笔记-项目整体管理-项目收尾