美文网首页语言PythonPythoner集中营
Python里的循环与迭代函数(下)

Python里的循环与迭代函数(下)

作者: 東飛 | 来源:发表于2017-04-12 17:40 被阅读109次

    zip( ) 和 izip( )函数

    当循环迭代两个以上的序列时,例如,写一个下面这样的循环,每次迭代获得不同序列中的元素:

    # -*- coding:utf-8 -*-
    
    title = ['one', 'two', 'three']
    author = ['Jack', 'Carl', 'David']
    i = 0
    while i < len(title) and i < len(author):
        x = title[i]  # 获取title的一个元素
        y = author[i]  # 获取author的一个元素
        print '第%d组title:%s,author:%s' % (i+1, x, y)
        i += 1
    
    

    使用zip()函数可以简化这段代码,例如:

    # -*- coding:utf-8 -*-
    
    title = ['one', 'two', 'three']
    author = ['Jack', 'Carl', 'David']
    i = 0
    
    for x, y in zip(title, author):
        print '第%d组title:%s,author:%s' % (i + 1, x, y)
        i += 1
    

    zip( s , t ) 将序列是 s 和 t 组合为一个元组序列 ( s[0] , t[0] )、( s[1] , t[1] )、( s[2] , t[2] )等,如果 s 和 t 的长度不等,则至用完长度最短的索引为止。使用zip( )函数时需要注意一点,即在Python 2 中,它会将的元素完全消耗尽,创建一个元组的列表。函数itertools.izip( )实现的效果与zip相同,但一次值生成一个元组,而不是创建一个元组列表。

    break 语句

    使用break语句可从循环体中跳出来。例如下面代码的功能是从文件中读取文本行,直到遇到空的文本行为止:

    # -*- coding:utf-8 -*-
    
    for line in open('test.txt', 'r'):
        stripped = line.strip()
        if not stripped:
            break    #遇到一个空行,停止读取
        print(stripped)
    
    

    continue 语句

    使用continue语句可以跳到循环的下一个迭代(跳过循环体中的余下代码)。例如,如下代码跳过一个文件中的所有空行:

    # -*- coding:utf-8 -*-
    
    for line in open('test.txt','r'):
        stripped=line.strip()
        if not stripped:
            continue    #跳过空行
        print stripped
    
    

    break和continue语句仅应用于正在执行的最内层循环。如果需要跳出多层嵌套循环结构,可以使用异常。Python不提供 "goto" 语句。

    else 语句

    在循环结构中也可以加入 else 语句,例如:

    # -*- coding:utf-8 -*-
    
    for line in open('test.txt', 'r'):
        stripped = line.strip()
        if not stripped:
            break
        print stripped
    else:
        raise RuntimeError('Missing selection separator')
    
    

    else 语句只在循环运行完成后才会执行。但是,如果先一步使用break语句中止了循环,else 子句将被跳过。

    相关文章

      网友评论

        本文标题:Python里的循环与迭代函数(下)

        本文链接:https://www.haomeiwen.com/subject/exymattx.html