零基础学Python(第2版)
上QQ阅读APP看书,第一时间看更新

3.3.2 for循环

for循环用于遍历一个集合,依次访问集合中的每个项目。for循环的格式如下所示。


01     for 变量 in 集合:
02         …
03     else:
04         …

for…in…循环的执行过程:每次循环从集合中取出一个值,并把该值赋值给变量。集合可以是元组、列表、字典等数据结构。其中else子句可以省略。

注意 for循环中的else子句也属于循环的一部分,最后一次循环结束后将执行else子句。

for…in…循环通常与range()函数一起使用,range()返回一个列表,for…in…遍历列表中的元素。range()函数的声明如下:


class range(object)
   range(stop) -> range object
range(start, stop[, step]) -> range object

【代码说明】range()返回一个range对象,列表的元素值由3个参数决定:参数start表示列表开始的值,默认值为0;参数stop表示列表结束的值,该参数不可缺少;参数setp表示步长,即每次递增或递减的值,默认值为1。

下面【例3-7】中的这段代码遍历range()生成的列表,过滤出正数、负数和0。

【例3-7.py】


01     # for in语句
02     for x in range(-1, 2):
03         if x > 0: 
04             print ("正数:",x)
05         elif x == 0 : 
06             print ("零:",x)
07         else:
08             print ("负数:",x)
09     else:
10         print ("循环结束")

【代码说明】

·第2行代码遍历range(-1,2)生成的列表。range(-1,2)返回的3个数字分别为-1、0、1。每次循环结束,变量x的值依次为-1、0、1。

·第3行代码判断变量x的值是否大于0。

·第4行代码输出正数的值。输出结果为“正数:1”。

·第5行代码判断变量x的值是否等于0。

·第6行代码,输出结果为“零:0”。

·第8行代码,输出负数的值。输出结果为“负数:-1”。

·第9行代码并没有结束for循环,else子句执行后循环才结束。输出结果为“负数:-1”。

在C、Java语言中,支持如下结构的for语句。


for(表达式1; 表达式2; 表达式3) 
           语句块

Python不支持这样的for循环。如果需要编写类似功能的循环,可以使用while循环。例如:


01     x = 0
02     while x < 5:
03         print(x)
04         x = x + 2

while循环的写法比较琐碎,需要比较判断。因此,对此也可以使用for循环,借助range()函数来实现。例如:


01     for x in range(0, 5, 2):
02         print (x)

【代码说明】输出的数字在[0,5)这个区间,不包括5。每次循环结束,x的值加2。输出结果:


0
2
4

这里只用了两行代码就实现了传统for循环。如果要用条件表达式作为循环的条件,可以构造range()函数来实现。