Python学习_05_条件、循环
条件
和其他语言类似,python中使用if...elif...else来形成分支,支持三目操作符 ?:,python中没有switch,但是缩进的特性让if...elif...else的结构同样便于阅读
循环控制
python中除了break,continue这两个一般的循环控制语句之外,还有一个pass,执行空操作。由于python的语法特性,添加pass可以留空某一个域,避免在调试过程中反复报错。
while循环
python中的while循环比其他语言增加了一个特性:支持else。在其他语言中,经常会用到判断是否正常结束循环还是中途break非正常结束,python中利用while...else可以简洁明了地解决这个问题:
i = 0
s = 'this is a test string'
while i < len(s):
if s[i] == 'z' :
break
i += 1
else:
print "There is no z in the string"
由于break会跳出整个while,包括else,所以else后面的语句可以在正常结束的情况下被执行。
for循环
python中的for循环更像是perl中的foreach,支持迭代器等特性,功能非常强大
for会访问可迭代对象中的每一个元素,并在所有元素都访问完毕之后结束循环,可迭代对象包括序列、字典、集合、迭代器等。
1. 直接循环序列项:这是最直接的循环方式:
alist = [‘A’,’B’,’C’,’D']
foreach value in alist:
print “value=“,value
如果是字典类型,则直接访问返回的是键,而不是值
2. 通过序列索引来访问序列:通过range()函数等,建立序列的索引对应序列,再通过循环访问该索引序列去访问原序列, 如果要提取索引值的话,有些情况下这种方式也是必要的:
alist = [‘A’,’B’,’C’,’D']
foreach index in range(len(alist)):
print “index=%i,value=%s“ % (index,list[index])
range()方法的完整语法是range(start,end,step=1),range(1,10,2)创建一个1到9的奇数序列,省略最后一个参数则步长默认为1,省略两个参数时,range()语法为range(end),默认从0开始,步长为1并且不可改变:
print range(1,10,2)
print range(1,10)
print range(10)
3. 同时访问索引和内容:通过enumerate()函数,构建一个enumerate对象,for每次循环可以从该对象中获取index和内容的对应元组,如果是字典的话,使用enumerate()方法只会提取键和其对应的索引(注意字典键的无序性),想要同时访问字典的键和值,则需要通过字典的iteritems()方法:
adict = {'A':'B','C':'D','EEE':'F'}
for k,v in adict.iteritems():
print k,v
alist = ['A','B','C','D']
for k,v in enumerate(alist):
print k,v
迭代器
迭代器和序列不同,并非根据索引来计数,迭代器是有一个next()方法的对象,for语句会使用next()方法获取下一项,并且在条目全部取出后,引发StopIteration异常,从而完成迭代。
通过iter方法可以生成一个迭代器,实际上,序列在for循环的过程中,也会被当成迭代器来迭代工作。字典的迭代器只会遍历字典的键,所以当使用for key in adict的时候,循环的是键,字典可以通过dict.iter*来生成键、值、键值对的迭代器。
迭代器是不可变的,所以不能在循环访问迭代器的过程中对相对应的对象进行改变,如果需要进行改变的操作,则需要利用keys()方法等返回一个键的列表,通过循环访问索引或者键的方式,再对对象进行改变。
列表生成器
在for循环的使用中,可以看到通过range()方法可以实现其他语言中for的简单功能,通过列表生成器生成特有的列表,则可以完成其他语言中for的全部功能。
列表解析:
[expr for iter_var in iterable if cond_expr]
生成器表达式:
(expr for iter_var in iterable if cond_expr)
生成器可以得到一个内存更加友好的结果,他并不创建数字列表,而是在每次计算出一个条目后,就讲该条目产生出来,生成器延迟计算的方式使其在内存上更加有效。
通过生成器,可以非常大限度上地简化代码,并且优化内存结构。
如通过[(x,y)for x in range(3) for y in range(3)]可以形成一个3*3的矩阵,而生成器则是不在内存中生成矩阵,而是逐个计算并生成结果。若要统计一个文件中的非空字节数,直接使用列表解析则可能会占用很大的内存,如使用 sum(len(word)) for line in data for word in line.split() 生成器,则可以事先不占用内存,而是逐行访问文件。
利用生成器,可以重构一些比较复杂的代码,如统计一个文件中的最长行的长度:
f = open(‘file’,’r')
allLineLens = [len(x.strip()) for x in f]
f.close()
return max(allLineLens)
在allLineLens中解析了一个列表,会讲整个文件读取到内存中,使用生成器:
return max(len(x.strip())) for x in open(‘file')
可以逐行读取,优化内存的同时,简化代码。
Python在科学计算上大幅被应用,科学家是讨厌循环的思维方式,生成器的方式将数据的结构更加直观地展示出来,更加能符合科学家的思维习惯应该也有很大关系吧。
Python学习_05_条件、循环的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习笔记——条件控制
Python中的条件控制方式基本和C语言类似,主要有如下几种语法: If条件判断 Python的条件语句的语法是if…elseif…else,如下的一个简单的猜数字的示例演示了这一过程: number ...
- python学习笔记:循环语句——while、for
python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...
- 【Python学习笔记】循环和迭代
for和while基本语法 break和continue else的使用 enumerate和zip在循环中的应用 for和while基本语法 Python中的的循环使用for和while语句来实现, ...
- python学习day6 for循环 字符串的内置方法
1.for循环 和while相比 l=[1,2,3] i=0 while i <len(l) print(l[i]) i+=1 l=['a','b','c'] for item in l: pr ...
- Python学习4——条件、循环及其他语句总结
多种语句 打印语句: 导入语句: 赋值语句: 代码块: 条件语句: 断言: 循环: 推导: pass.dal.exec和eval : 学习到的新函数:(以下函数的应用代码均在IDLE测试通过) ch ...
- python学习第六天 条件判断和循环
总归来讲,学过C语言的同学,对条件判断和循环并不陌生.这次随笔只是普及一下python的条件判断和循环对应的语法而已. 条件判断: 不多说,直接贴代码: age = 23 if age >= 6 ...
- Python学习笔记—条件判断和循环
条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...
- Python学习笔记——条件和循环
1.条件表达式 >>> x = 3 >>> x = 1 if x<3 else 2 >>> x 2 2.for语句用于序列类型 <1& ...
随机推荐
- linux nginx搭配https
微信小程序upload接口必须是https请求,所以就搭建https 1.申请ssl证书 这里用的是腾讯云提供的免费ssl. https://console.qcloud.com/ssl?_ga=1. ...
- 关于mui header在手机上运行丢失问题
并不需要换header, 只需要把引用的例子自带的CSS文件 app.css.里的两个样式:.mui-plus.mui-android header.mui-bar {display: none;}. ...
- 框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)
框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解) 一丶什么是框架,以及框架的作用 什么是框架? 框架,简而言之就是把东西封装好了,使用框架开发可以快速开发程序,例如MFC程序的双击写代码. 为 ...
- Unix:关于一个file在file system和disk中占用空间
參考文献: Harley Hahns:Guide to Unix and Linux. Chap 24 -->首先要有的关键概念:the amount of "disk space&q ...
- 假设不小心改动了系统SDK文件,编译无法通过改怎么办?(iOS开发)
project报例如以下错误: fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimul ...
- 自学Zabbix3.5.2-监控项item-types监控类型
自学Zabbix3.5.2-监控项item-types监控类型 1. item types item types是由zabbix提供的各种类型的检查器,大致就是Zabbix agent, Simple ...
- 大数据学习(6)MapReduce应用
倒排索引 /** * * * <pre> *file1.txt: *hello ketty *hello tomcat * *file2.txt: *hello hadoop * *map ...
- 【java】工厂模式Factory,利用反射改进
package 反射; interface Product{ public void produce(); } class socks implements Product{ @Override pu ...
- 【python】字符串、列表、元组间相互转化及函数len、max、min、sum、sorted、reversed、enumerate、zip用法示例
- Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目
虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置. (1)第一步:打开虚拟机目录下的Vagrantfile文 ...