![Python程序设计教程(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/531/34752531/b_34752531.jpg)
3.2.2 for语句
for语句通过遍历一个序列(字符串、列表、元组)或可迭代对象中的每个元素来建立循环。
for语句的语法形式如下所示:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image918.jpg?sign=1738957365-6fE6vXsIzNHQhEGnoSY3RQpU8gcx4IvO-0-1af392effa22d4f6b56bfe6dec4b3fa8)
简单的for语句执行流程如图3.7所示。
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image915.jpg?sign=1738957365-GkMlBXI8NerlgPGPVeffdV8EuQsYTDTy-0-92f5fe8f9b66f50eb71f9f25a861a4d9)
图3.7 简单for语句执行流程图
循环开始时,for关键词后面的循环控制变量从in关键词后面的序列或可迭代对象中取值,如果没有取到值,则不进入循环;如果序列或可迭代对象中有值可取,则取到最前面的值,接着执行循环体。循环体执行完成后,循环控制变量继续取序列或可迭代对象的下一个值,如果没有值可取了,则终止循环;否则取到下一个值后继续执行循环体;然后重复以上过程,直到序列或可迭代对象中没有值可取,循环终止。
1. 用for循环遍历序列中的元素
【例3-8】 用列表存储若干城市的名称,利用for循环逐一输出城市名称。
程序代码:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image919.jpg?sign=1738957365-9KoRxVeIhOR1XJ61zYF5nvarkM1j1QUK-0-6fb00c40c3f8cabe80a58a206210f19b)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image920.jpg?sign=1738957365-3nvi0aKlyNnPNvnuY5zBqc6haLIKraGc-0-4ec2829aa1148ffa12f5fcb3ce9f2f5a)
程序example3_8.py中的变量name访问到nameList中的每个字符串。print语句结束时不换行,而是添加一个空格。
2. 用for循环遍历可迭代对象
Python 3开始,函数range返回可迭代对象。本节以遍历range函数返回的可迭代对象为例,讲解用for循环遍历可迭代对象。
range函数的语法格式如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image921.jpg?sign=1738957365-1Lod8CQJugPuUIf8H5Pe4SQTKQ5NpYoS-0-72e373dfd810c4265549947ebd9204f0)
功能:
产生一个从start开始(包括start),到stop结束(不包括stop),两个整数对象之间间隔step的可迭代对象。
参数说明:
(1)start:可迭代对象的开始值为start,默认是从0开始。例如range(6)等价于range(0,6);
(2)stop:可迭代对象到stop结束,但不包括stop。例如:range(0,6)产生包含0,1,2,3,4,5的可迭代对象,但没有6;
(3)step:步长,表示所产生的可迭代对象元素之间的间隔,默认为1。例如:range(0,6)等价于range(0,6,1)。步长也可以是负数,这时开始值大于结束值。
用range函数产生的是一个可迭代的range对象,例如:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image922.jpg?sign=1738957365-vhHtOXAXb7LNfZa2wMl7DLRiFU1CFcHt-0-e3d73de4694189562b3edb54065a465f)
range对象可以被转换成列表或元组,例如:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image923.jpg?sign=1738957365-LTE200iGmWGcZuE4xt0xfgnt4st7JYuN-0-aca2c559a2a7badc97b6d0def5e0cf1a)
可以用for循环直接遍历range函数产生的可迭代对象。用for循环遍历一些range所产生的可迭代对象例子如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image924.jpg?sign=1738957365-flEc0iX3V8gRyJuIeVjkzu8cdpgFgLVZ-0-cae6b57f0a2b56848568ce07705fa079)
执行结果为:0 1 2 3 4 5 6 7 8 9
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image925.jpg?sign=1738957365-w4boWqV0zKNXWZZtEQQgqZrOZfVNmQYc-0-92d765268abf9483dfdd6db2340f4bfa)
执行结果为:0 1 2 3 4 5 6 7 8 9
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image926.jpg?sign=1738957365-mfiA060kYVDGyvQGfF4lFihkpKsFiSVA-0-2d5d00819123d4061cdfcc90d625f295)
执行结果为:3 4 5 6 7 8 9 10 11 12 13 14
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image927.jpg?sign=1738957365-ripRMI8Ih36T63saknE1enw5sTPojoOV-0-3ecfa7612497737390d7c94822759d51)
执行结果为:3 4 5 6 7 8 9 10 11 12 13 14
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image928.jpg?sign=1738957365-LhK0rQ0QutjEKwcE9gpVzPOlia6AS2vg-0-26db1f1432937ecdb0af07d50bfe6fa9)
执行结果为:3 5 7 9 11 13
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image929.jpg?sign=1738957365-lgSORUE0862GeWnG0ihWc7pnn2FvuG0n-0-fe09ef13b5ee365517f890c048b85485)
执行结果为:15 13 11 9 7 5
range函数经常被用到for语句中,用于遍历序列的索引值。例3-8也可以使用以下方法实现。
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image930.jpg?sign=1738957365-ZF1RwTGaQILGSdgVouw0IQZqZahvGwLW-0-7fd0d55fae274bb3516353dba3312d29)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image931.jpg?sign=1738957365-ihpwUfgbDqcVzs4YOqUiD6AOEIxVKGkO-0-97cf7b74eb5e5b6ba2204502a1bce500)
语句range(len(nameList))先求len(nameList)的值为6;然后执行range(6),生成包含0、1、2、3、4、5的可迭代对象。i是for语句的循环控制变量,依次取可迭代对象中的值。将这个值作为访问列表nameList中元素的索引(即元素在列表中所处的位置)。通过nameList[i]语句获取索引i对应的列表中的元素。