Python中的for

来源:互联网 发布:猪八戒淘宝直播 编辑:程序博客网 时间:2024/06/14 17:10
for循环是我们写C、写java的人所最熟悉不过的循环语句,但是在Python中, for语句与我们平时所接触的有所不同。

for语句提供了Python中最强大的循环结构。它可以遍历序列成员,可以用在列表解析和生成器表达式中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的)。

一、一般语法:

for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素,并在所有条目都处理过后结束循环,它的语法如下:

for iter_var in iterable:     suite_to_repeat


每次循环,iter_var迭代变量被设置为可迭代对象(序列、迭代器或其他支持迭代的对象)的当前元素,提供给suite_to_repeat语句块使用。


二、用于序列类型:

本节中,我们将学习用for循环迭代不同的序列对象。样例将涵盖字符串、列表及元组。(对列表与元组不熟悉的可以再重新看看这部分内容)

>>>for eachLetter in 'Names':>>>       print 'current letter:',eachLetter>>>current letter:Ncurrent letter:acurrent letter:mcurrent letter:ecurrent letter:s

当迭代字符串时,迭代变量只会包含一个字符(长度为1的字符串)。但这并不常用。在字符串里查找字符时,程序员往往使用 in来测试成员关系,或者使用string 模块中的函数以及字符串方法来检查子字符串。

看到单个的字符在一种情况下有用,即在通过 print 语句调试for 循环中的序列时,如果你在应该看到字符串的地方发现的却是单个的字符,那么很有可能你接受到的是一个字符串,而不是对象的序列。

迭代序列有三种基本方式:

1、通过序列项迭代

>>>nameList = ['Walter',‘Nicole’,'Steven','Henry'] >>>for eachName in nameList:>>>    print eachName,"Lim">>>Walter LimNicole LimSteven LimHenry Lim

在上面的例子中,我们迭代一个列表。每次迭代,eachName变量都被设置为列表中特定某个元素,然后我们在代码块中打印出这个变量。


2、通过序列索引迭代

>>>nameList = ['Cathy','Terry','Joe','Heather',‘Lucy’]>>>for nameIndex in range(len(nameList)):>>>       print "Liu,",nameList[nameIndex]>>>Liu, CathyLiu,TerryLiu,JoeLiu,HeatherLiu,Lucy

我们没有迭代元素,而是通过列表的索引迭代。
这里我们使用了内建的len() 函数获得序列长度,使用range()函数(我们将在下面详细讨论它)创建了要迭代的序列。

>>>len(nameList)5>>>range(len(nameList))[0,1,2,3,4]


使用range() 我们可以得到用来迭代nameList的索引数列表;使用切片/下标操作符([ ]),就可以访问对应的序列对象。

3、使用项和索引迭代

两全其美的办法是使用内建的 enumerate() 函数,它是Python2.3的新增内容。代码如下:

>>>nameList = ['Donn','Shirley','Ben','Janice','David','Yen','Wendy']>>>for i, eachLee in enumerater(nameList):>>>      print "%d %s Lee" % (i+1,eachLee)>>>1 Donn Lee2 Shirley Lee3 Ben Lee 4 Janice Lee5 David Lee6 Yen Lee7 Weny Lee

使用迭代器做for循环的代码与使用序列条目几乎完全相同。事实上在大多情况下,你无法分辨出你迭代的是一个序列还是迭代器,因此,这就是为什么我们再说要遍历一个迭代器时,实际上可能我们只的是要遍历一个序列,迭代器,或是一个支持迭代的对象(它有next()方法)。


三、range()函数

我们前面介绍Python的for循环的时候提到过它是一种迭代的循环机制。Python同样提供一个工具让我们在传统伪条件设置下使用for循环,例如从一个数字开始计数到另一个数字,一旦到达最后的数字或者某个条件不再满足就立刻退出循环。

内建函数 range()    可以把类似foreach的for循环变成你更加熟悉的语句。例如从0到10计数,或者从0到10一次递增5.


1、range() 的完整语法

Python提供了两种不同的方法来调用range()。完整语法要求提供两个或三个整型参数:

range(  start, end, step-1 )

range()会返回一个包含所有k的列表,这里start<=k<end, 从 start 到 end , k 每次递增 step .step 不可以为零,否则将发生错误。

>>>range(2, 19, 3)[2, 5, 8, 11, 14, 17]

如果只给定两个参数,而省略 step ,step 就使用默认值 1 。

>>>range(3, 7)[3, 4, 5, 6]













0 0