python【5】-生成式,生成器
一、条件和循环
1. if语句
if <条件判断1>:<执行1> elif <条件判断2>:<执行2> else:<执行4>
例如:
age=5 if age>=18:print 'adult' elif age>=6:print 'teenager' else:print 'kid'
一定要注意条件语句结尾的冒号,以及代码段的缩进。
只要if参数是非零数值、非空字符串、非空list等,就判断为True
,否则为False
。
2.循环
range(num):返回0到num-1之间的整数。例如:
print range(5)>>>[0,1,2,3,4]
for循环:for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
s=0 for i in range(101):s+=i print s
while循环:只要条件满足,就不断循环,条件不满足时退出循环。
i=1 s=0while(i<=100):s=s+ii=i+1print s
3.迭代
dict类型for ..in ..迭代有以下几种方式:
d={'a':1,'b':2,'c':3}
默认迭代key
for k in d:print k
iterkeys()返回key迭代器
for key in d.iterkeys():print key
itervalues()返回value迭代器
for value in d.itervalues():print value
iteritems()返回键值对迭代器
for key,value in d.iteritems():print key+"="+str(value)
判断对象是否可迭代:通过collections模块的Iterable类型判断
from collections import Iterable print isinstance(d,Iterable)
带下标迭代:Python内置的enumerate
函数可以把一个list变成索引-元素对
l=range(5) for i,value in enumerate(l):print i,value
二、生成式
1.列表生成式
列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理。语法格式为:
[exp for val in collection if condition]
相当于
result=[] for val in collection:if(condition):result.append(exp)
我们看个例子:将列表中的字符串转换为小写组成新的列表。
L=['Hello',10,'World',None] print [s.lower() for s in L if isinstance(s,str)] 运行结果: ['hello', 'world']
2.字典生成式
字典生成式基本格式如下:
{key-exp:val-exp for value in collection if condition}
例如:
print {i:i*10 for i in range(1,10) if(i%2==0)}运行结果为: {8: 80, 2: 20, 4: 40, 6: 60}
3.集合生成式
集合生成式格式和列表生成式类似,只不过用的是大括号:
{exp for value in collection if condition}
例如:统计列表中字符串元素的各种长度。
L=['Hello',10,'World',None,'aa'] print {len(x) for x in L if isinstance(x,str)}运行结果: set([2, 5])
4.嵌套列表生成式
嵌套列表生成式要注意for循环的顺序。
例如:我们想提取由两个列表组成的嵌套列表中,含有a的字符串:
L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']] print [name for list in L1 for name in list if name.count('a')>0]运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']
我们还可以将嵌套列表中的数据进行扁平化展现,例如:
L2=[(1,3,5),(2,4,6),(100,200)] print [value for t in L2 for value in t]运行结果: [1, 3, 5, 2, 4, 6, 100, 200]
发现语法太简洁啦!!
三、生成器
在Python中,有一种自定义迭代器的方式,称为生成器(Generator)。
定义生成器的两种方式:
1.创建一个generator,只要把一个列表生成式的[]
改成()
,就创建了一个generator:
l=[x for x in range(1,10)] print lg=(x for x in range(1,10)) print g.next() print g.next()for x in g:print x运行结果: [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 2 3 4 5 6 7 8 9
generator保存的是算法,每次调用next()
,就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
2.定义generator的另一种方法。如果一个函数定义中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator:
def fib(n):a=1b=1i=0;yield ayield bwhile(i<n):a,b=b,a+bi+=1yield bfor x in fib(10):print x运行结果: 1 1 2 3 5 8 13 21 34 55 89 144
生成器和普通函数区别:
普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回;
而变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。
def test():print 1yieldprint 2yieldprint 3yieldt=test() t.next()#运行结果1 t.next()#运行结果2 t.next()#运行结果3
如需转载,请标明原文链接:http://www.cnblogs.com/janes/
python【5】-生成式,生成器相关推荐
- python列表生成器语法_Python 列表生成式\生成器
Python 列表生成式+生成器 一.列表生成式 1.什么是列表生成器 一种可以便捷地生成列表的表达式,有时候可以替换list.append(变量) 2.需求. 如何将列表中的每个数据都加1 列表:d ...
- 快速记忆python函数-【速学速记】Python 列表生成式的进化:生成器
原标题:[速学速记]Python 列表生成式的进化:生成器 1. 列表生成式的缺点 通过列表生成式,我们可以直接创建一个列表.但是,内存数量有限,列表容量肯定不能超过内存大小. 再有,创建一个包含10 ...
- python 列表生成式_深度好文:Python之列表生成式、生成器、可迭代对象与迭代器(一)...
作者:云游道士 原文:https://www.cnblogs.com/yyds/p/6281453.html 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterab ...
- python编程有什么用处-python中的生成器是什么?生成器有什么用处?
在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...
- python的 是什么-python中的生成器是什么?生成器有什么用处?
在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...
- Python中的生成器与迭代器
Python中的生成器与迭代器 转自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640,推荐去该链接读原文,有习题和 ...
- python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器
迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...
- python小说自动生成器_python- generator生成器
什么是生成器? 通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后 ...
- python基础(迭代器,生成器,装饰器)
python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...
- 简单介绍python迭代器和生成器
这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...
最新文章
- 加深C# 中字符串前加@符号理解以及使用~~
- 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
- 轻量化网络:Xception
- attention的前世今生
- oracle /etc/fonts simfang.ttf,xelatex 无法找到方正字体
- 列生成(Column Generation)算法
- Matlab与线性代数 -- Hilbert矩阵
- mysql busy buffer_buffer busy wait 解析
- cdr软件百度百科_Cdr是什么软件
- C. Inna and Dima
- 【历史上的今天】8 月 18 日:硅谷神话的衰落;微软发布 QuickBASIC;Adobe Audition 问世
- 脂肪体重器、手环、NFC手机
- mysql没有表空间,MySQL的表空间是什么
- Java方向发展前景与就业方向探讨
- android 网络代码是什么意思,Android判断网络状态的代码
- jekyll本地构建报错(GitHub Metadata No GitHub API authentication could be found.)
- 线性代数 --- 投影Projection 四(投影有什么用?Why projection)
- Ubuntu 安装 Code Blocks 16.01
- 在React Native和Node.js中验证iOS订阅收据
- Webpack打包后模块分析
热门文章
- mysql 代码怎么优化_MySQL 性能优化的简略办法
- mysql 主键 下一个值_INNODB自增主键的一些问题 vs mysql获得自增字段下一个值
- mac mysql-python 失败_MAC OS安装MySQL-python总是失败,请帮忙看看什么原因?
- html5app微信登陆,基于h5+的微信登陆,hbuilder打包
- python可以做哪些东西_自己总结的一些东西
- matlab 第i行到j行,matlab简明教程
- linux如何安装eclipse
- Package ‘oniguruma’, required by ‘virtual:world’, not found
- 【php7扩展开发六】zval的操作
- kubernetes学习笔记之七:Ingress-nginx部署使用