一、条件和循环

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】-生成式,生成器相关推荐

  1. python列表生成器语法_Python 列表生成式\生成器

    Python 列表生成式+生成器 一.列表生成式 1.什么是列表生成器 一种可以便捷地生成列表的表达式,有时候可以替换list.append(变量) 2.需求. 如何将列表中的每个数据都加1 列表:d ...

  2. 快速记忆python函数-【速学速记】Python 列表生成式的进化:生成器

    原标题:[速学速记]Python 列表生成式的进化:生成器 1. 列表生成式的缺点 通过列表生成式,我们可以直接创建一个列表.但是,内存数量有限,列表容量肯定不能超过内存大小. 再有,创建一个包含10 ...

  3. python 列表生成式_深度好文:Python之列表生成式、生成器、可迭代对象与迭代器(一)...

    作者:云游道士 原文:https://www.cnblogs.com/yyds/p/6281453.html 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterab ...

  4. python编程有什么用处-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  5. python的 是什么-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  6. Python中的生成器与迭代器

    Python中的生成器与迭代器 转自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640,推荐去该链接读原文,有习题和 ...

  7. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  8. python小说自动生成器_python- generator生成器

    什么是生成器? 通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后 ...

  9. python基础(迭代器,生成器,装饰器)

    python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...

  10. 简单介绍python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...

最新文章

  1. 加深C# 中字符串前加@符号理解以及使用~~
  2. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  3. 轻量化网络:Xception
  4. attention的前世今生
  5. oracle /etc/fonts simfang.ttf,xelatex 无法找到方正字体
  6. 列生成(Column Generation)算法
  7. Matlab与线性代数 -- Hilbert矩阵
  8. mysql busy buffer_buffer busy wait 解析
  9. cdr软件百度百科_Cdr是什么软件
  10. C. Inna and Dima
  11. 【历史上的今天】8 月 18 日:硅谷神话的衰落;微软发布 QuickBASIC;Adobe Audition 问世
  12. 脂肪体重器、手环、NFC手机
  13. mysql没有表空间,MySQL的表空间是什么
  14. Java方向发展前景与就业方向探讨
  15. android 网络代码是什么意思,Android判断网络状态的代码
  16. jekyll本地构建报错(GitHub Metadata No GitHub API authentication could be found.)
  17. 线性代数 --- 投影Projection 四(投影有什么用?Why projection)
  18. Ubuntu 安装 Code Blocks 16.01
  19. 在React Native和Node.js中验证iOS订阅收据
  20. Webpack打包后模块分析

热门文章

  1. mysql 代码怎么优化_MySQL 性能优化的简略办法
  2. mysql 主键 下一个值_INNODB自增主键的一些问题 vs mysql获得自增字段下一个值
  3. mac mysql-python 失败_MAC OS安装MySQL-python总是失败,请帮忙看看什么原因?
  4. html5app微信登陆,基于h5+的微信登陆,hbuilder打包
  5. python可以做哪些东西_自己总结的一些东西
  6. matlab 第i行到j行,matlab简明教程
  7. linux如何安装eclipse
  8. Package ‘oniguruma’, required by ‘virtual:world’, not found
  9. 【php7扩展开发六】zval的操作
  10. kubernetes学习笔记之七:Ingress-nginx部署使用