【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中的所有元素,直到没有可迭代的元素为止。所有可迭代的对象都可以使用for语句,所有实现了__iter__和__next__方法的对象都是可迭代对象。

简单例子如下:

for i in range(10):
    print(i)

i = 0
while 1:
    if i < 10:
        print(i)
    else:
        break

 

break和continue


 

    使用break可以跳出循环,而continue可以跳到循环的下一个迭代,如下例子:

  读取一个文件,遇到空行,停止读取。

for line in open("test.txt"):
    stripped = line.strip()
    if not stripped:
        break    #遇到空行,停止读取,整个循环终止

  

      读取一个文件,遇到空行则忽略处理。

for line in open("test.txt"):
    stripped = line.strip()
    if not stripped:
        continue     #遇到空行,跳过处理,进行处理下一行

  

  break和continue语句仅应用于正在执行的最内层循环,如果要跳出多层循环嵌套结构,则需要使用多个break和continue或者使用异常。如下例所示:

#读取一个文件,处理非空白行,如果非空白行中有一个空白符,则结束整个处理
for line in open("test.txt"):
    stripped = line.strip()
    if not stripped:
        continue
    for c in stripped:
        if c is '':
            break

#使用异常跳出整个循环
for line in open("test.txt"):
    stripped = line.strip()
    if not stripped:
        break
    for c in stripped:
        if c is '':
            raise RuntimeError("c is empty"")

 

else语句 


 

while和for语句后还可以加入else语句,语法如下:

while expression:
    statements
else:
    statements

for item in s:
    statements
else:
    statements

else在两种情况下会被执行:

  1.循环根本不执行,则会立刻执行else语句

  2. 循环执行完毕,则会执行else语句.

  注意如果在循环中使用break跳出循环,则不会执行else语句。else的主要有循环技术后进行进行检查,后者进行一些后续处理,例如可以关闭文件。如下面的例子,我们从一个文件中循环非空白行,文件读取结束后关闭文件,类似于with的用法。  

f = open("test.txt")
for line in f.readlines():
    stripped = line.strip()
    if not stripped:
        continue
else:
    print("close file")
    f.close()

 

  enumerate和zip在循环中的使用


 

  使用for in in s 这种方式的循环我们只能循环获取到s中的元素,如果我们想获取到索引,可以如下这样子使用:

for i in range(len(s)):
    value = s[i]

      也可以使用enumerate()函数来简化,enumerate(s)创建一个迭代器,返回值是一个元组的序列(0,s[0]),(1,s[1]),...(n,s[n])。  

for i, v in enumerate(s):
    pass

 

  循环中常见的另外一种形式是同时迭代两个以上的序列,例如有两个长度一样的序列s和t,要对其对应的每一项分别处理,代码如下:  

s = [1,2,3,4,5]
t = [10,11,12,14,15]
while i < len(s) and i < len(t):
    x = s[i]
    y = t[i]
    if x < y:
        print("x < y")
    else:
        print("x >= y")
    i += 1

  可以使用zip()内置函数来简化这段代码,如下:

for x,y in zip(s,t):
    if x < y:
        print("x < y")
    else:
        print("x >= y")

  zip(s1,s2...sn)将序列s1,s2...sn序列组合成一个元组(s1[0],s2[0]...sn[0]),...(s1[n],s2[n]...sn[n]), 如果s1,s2...sn的长度不等,则取其中最短的长度。

 

posted on 2015-03-02 13:36  恋曲1990  阅读(368)  评论(0编辑  收藏  举报

导航