![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=1738955645-t69p1DgbZEg8jiSy52tdMeCehV8kV5UY-0-b812b9b9757dd942f331e9ca7c771b8d)
简单的for语句执行流程如图3.7所示。
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image915.jpg?sign=1738955645-aENjCQXorL6SUs78zSQ8B6qIKlMuWA7t-0-e5e5dbdc11a321e686a5fa2fa46bbeb8)
图3.7 简单for语句执行流程图
循环开始时,for关键词后面的循环控制变量从in关键词后面的序列或可迭代对象中取值,如果没有取到值,则不进入循环;如果序列或可迭代对象中有值可取,则取到最前面的值,接着执行循环体。循环体执行完成后,循环控制变量继续取序列或可迭代对象的下一个值,如果没有值可取了,则终止循环;否则取到下一个值后继续执行循环体;然后重复以上过程,直到序列或可迭代对象中没有值可取,循环终止。
1. 用for循环遍历序列中的元素
【例3-8】 用列表存储若干城市的名称,利用for循环逐一输出城市名称。
程序代码:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image919.jpg?sign=1738955645-YUAhOEbYir3T8yjiUnDgCvxusj3QYnTP-0-5ad60334f1c7c81e43012ea72b609c20)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image920.jpg?sign=1738955645-OoOsh9IlnewMRIrMMbXqgmk20LPibmtH-0-8e542e144a11f10426d7c29a2fb27fa6)
程序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=1738955645-HlmLJkCOg8JST9640HfjMl7f0k5f7MzK-0-73c52265cbd78032b6bb8f41aa2a75c2)
功能:
产生一个从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=1738955645-fy8iOAjqVTpGtcfsMdNL5VfwfFNppdL0-0-50905994fd57af9a54289fa235e65e08)
range对象可以被转换成列表或元组,例如:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image923.jpg?sign=1738955645-Xpwz8sT2g0jVgsoYMWNLW5slCxjvbQrr-0-44a3f1e30a5994fb1284ecb26839fcb6)
可以用for循环直接遍历range函数产生的可迭代对象。用for循环遍历一些range所产生的可迭代对象例子如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image924.jpg?sign=1738955645-EXaqY0XGEx4SqABzjvu4uNDxfL9XqWjZ-0-5c2cbaedec7a3cf79b89209ccc6d0fa0)
执行结果为:0 1 2 3 4 5 6 7 8 9
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image925.jpg?sign=1738955645-kWAY7rGQ8yRqlrhbJvfLDC0XqaYTxY8E-0-f7878cce56bbcab84c053b955b3e048e)
执行结果为:0 1 2 3 4 5 6 7 8 9
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image926.jpg?sign=1738955645-HG3sYNHAD5I6BOhXrcfOEtPLRqobWv3X-0-828a6d65a0dfce84cd2c6e330e44bf23)
执行结果为:3 4 5 6 7 8 9 10 11 12 13 14
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image927.jpg?sign=1738955645-5xbR03U6Xuvyx1YCfhdrogbKEssBCdv3-0-2ba7b933ed3accf4c3c87803f36893fc)
执行结果为:3 4 5 6 7 8 9 10 11 12 13 14
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image928.jpg?sign=1738955645-uGZkCADymiqQW4OBRjkI1UPKklnvUbCG-0-963e5177a38299a97a8150a606541d80)
执行结果为:3 5 7 9 11 13
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image929.jpg?sign=1738955645-LJWJwA1QHnRlofIDs6KIJwX4I4L2xYjy-0-cf04c63e22cfcf53fe4495190a18d995)
执行结果为:15 13 11 9 7 5
range函数经常被用到for语句中,用于遍历序列的索引值。例3-8也可以使用以下方法实现。
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image930.jpg?sign=1738955645-JyJ71IQX7LcBAQ9PAwbiwzQ9eEWubK6E-0-45e5f09f56768b7336bed71743713e30)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image931.jpg?sign=1738955645-sERPeYYmGVK83ReHgzVKGNiUwhJbVjXo-0-71887279e4ec93dbc0d5f34bbc1ea226)
语句range(len(nameList))先求len(nameList)的值为6;然后执行range(6),生成包含0、1、2、3、4、5的可迭代对象。i是for语句的循环控制变量,依次取可迭代对象中的值。将这个值作为访问列表nameList中元素的索引(即元素在列表中所处的位置)。通过nameList[i]语句获取索引i对应的列表中的元素。