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在科学计算上大幅被应用,科学家是讨厌循环的思维方式,生成器的方式将数据的结构更加直观地展示出来,更加能符合科学家的思维习惯应该也有很大关系吧。

时间: 2024-08-26 01:57:33

Python学习_05_条件、循环的相关文章

【Python学习笔记】循环和迭代

for和while基本语法 break和continue else的使用 enumerate和zip在循环中的应用 for和while基本语法 Python中的的循环使用for和while语句来实现,基本语法结构如下: #while语法while expression: statements #for语法 for item in s: statements while无限循环执行循环体中的语句,直到相关表达式求值为False.for语句迭代s中的所有元素,直到没有可迭代的元素为止.所有可迭代的对

day01:python之while条件循环

continue:  break:  一次性跳出多次嵌套循环:  while+else  while条件循环:

Python学习4——条件、循环及其他语句总结

多种语句 打印语句: 导入语句: 赋值语句: 代码块: 条件语句: 断言: 循环: 推导: pass.dal.exec和eval :  学习到的新函数:(以下函数的应用代码均在IDLE测试通过) chr(n) :  返回一个字符串,其中只包含一个字符,这个字符对应与输入的顺序n(0<n<256),经过测试也不一定要小于256啊!手动滑稽,寻找原因中...... >>> chr(2) '\x02' >>> chr(89) 'Y' >>> ch

Python学习6——条件,循环语句

条件语句 真值也称布尔值. 用作布尔表达式时,下面的值都将被视为假:False None  0   ""   ()   []   {}. 布尔值True和False属于类型bool,而bool与list.str和tuple一样,可用来转换其他的值. >>> bool('I think,therefore I am') True >>> bool(10) True >>> bool('') False >>> boo

Python学习笔记——条件和循环

1.条件表达式 >>> x = 3 >>> x = 1 if x<3 else 2 >>> x 2 2.for语句用于序列类型 <1>通过序列项迭代 >>> List = ['a','b','c','d'] >>> for eachList in List: ... print eachList ... a b c d <2>通过序列索引迭代 >>> for eachL

python学习-7 条件语句 while循环 + 练习题

1.死循环 while 1 == 1: print('ok') 结果是一直循环 2.循环 count = 0 while count < 10: print(count) count = count +1 print(error) 3.练习题 ~ 使用while循环输出1 2 3 4 5 6   8 9 10 count = 1 while count <= 10 : # 或者count < 11 if count == 7: print( ) # 也可以添加pass,什么也不执行 el

python基础之条件循环语句

前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python interprets non-zero values as True. None and 0 are interpreted as False. Python 判断非0的值为 True, 而None和0被认为是 False.注意这里的True和False首字母大写,Py

python 学习笔记day02-python循环、文件、函数、模块

循环语句 while 循环 while 循环语法结构 当需要语句不断的重复执行时,可以使用 while 循环 while expression: while_sutie 语句 while_suite 会被连续不断的循环执行,直到表达式的值变成 0 或 False         #!/usr/bin/env python         # -- coding: utf-8 --         sum100 = 0         counter = 1         while count

python学习之while循环

Python While 循环语句 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行语句可以是单个语句或语句块.判断条件可以是任何表达式,任何非零.或非空(null)的值均为true. 当判断条件假false时,循环结束. 执行流程图如下: while 语句时还有另外两个重要的命令 continue,break 来跳过循环,continue 用于跳过该次循环,break