![Python王者归来](https://wfqqreader-1252317822.image.myqcloud.com/cover/412/31794412/b_31794412.jpg)
7-1 基本for循环
for循环可以让程序将整个对象内的元素遍历(也可以称迭代),在遍历期间,同时可以纪录或输出每次遍历的状态或称轨迹。for循环基本语法格式如下:
for var in 可迭代对象: # 可迭代对象英文是iterable object 程序代码区块
可迭代对象(iterable object)可以是列表、元组、字典与集合或range( ),在信息科学中迭代(iteration)可以解释为重复执行,上述语法可以解释为将可迭代对象的元素当作var,重复执行,直到每个元素皆被执行一次,整个循环才会停止。
设计上述程序代码时,必须要留意缩排的问题,可以参考if叙述观念。由于这里笔者介绍列表(list),所以读者可以想象这个可迭代对象(iterable)是列表(list),第8章笔者会讲解元组(Tuple),第9章会讲解字典(Dict),第10章会讲解集合(Set)。另外,上述for循环的可迭代对象也常是range( )函数产生的可迭代对象,将在7-2节说明。
7-1-1 for循环基本运作
例如,一个NBA球队有5位球员,分别是Curry、Jordan、James、Durant、Obama,现在想列出这5位球员,那么使用for循环执行这个工作就很适合。
程序实例ch7_3.py:列出球员名称。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P87_50223.jpg?sign=1739544875-INRRnDXSdODDqJbGIU02Y2NNFFvwu6Mg-0-30cda3d177d78e8c22b6d95feea88302)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P87_50246.jpg?sign=1739544875-jPhgjZVE8YnieREaB25Dxia7DWYhc3Cx-0-95616d5c549c7cdf03362185997b12a2)
上述程序执行的观念是,当第一次执行下列语句时:
for player in players:
player的内容是‘Curry’,然后执行print(player),所以会印出‘Curry’。由于列表players内还有其他的元素尚未执行,所以会执行第二次,当执行第二次下列语句时:
for player in players:
player的内容是‘Jordan’,然后执行print(player),所以会印出‘Jordan’。由于列表players内还有其他的元素尚未执行,所以会执行第三次,第四次,当执行第五次下列语句时:
for player in players:
player的内容是‘Obama’,然后执行print(player),所以会印出‘Obama’。第六次要执行for循环时,由于列表players内所有元素已经执行,所以这个循环就算执行结束。下列是循环的流程示意图。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P88_50646.jpg?sign=1739544875-f9YXPF7FG3voF31aMcxD863WDCUd7ql8-0-ff5f972117d76d0ff543af4e9b9d4a5a)
7-1-2 如果程序代码区块只有一行
使用for循环时,如果程序代码区块只有一行,它的语法格式可以用下列方式表达:
for var in 可迭代对象:程序代码区块
程序实例ch7_4.py:重新设计ch7_3.py。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P88_50650.jpg?sign=1739544875-4elkNN42qjFkjoQOyDUViVGkNSysgxgT-0-c3eff3ad100d912542c31cb6040bd28e)
执行结果 与ch7_3.py相同。
7-1-3 有多行的程序代码区块
如果for循环的程序代码区块有多行程序时,要留意这些语句同时需要做缩排处理。它的语法格式可以用下列方式表达:
for var in 可迭代对象: 程序代码 程序代码 ……
程序实例ch7_5.py:这个程序在设计时,首先笔者将列表的元素英文名字全部改成小写,然后for循环的程序代码区块有2行,这2行(第4和5行)皆需内缩处理,player.title( )的title( )方法可以处理第一个字母以大写显示。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P88_50660.jpg?sign=1739544875-YND7MpnvuyOJwFn390IDMrwtTj69u3wC-0-cdbf7ff77d4ada8efc17877f98d874c6)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51064.jpg?sign=1739544875-jyOcSv20ZrVZNAziLy8wdlDcRStgYqI4-0-d65543e082d0bb5c2b3030f261fd5f73)
7-1-4 将for循环应用在列表区间元素
Python也允许将for循环应用在6-1-2节和6-1-3节所截取的区间列表元素上。
程序实例ch7_6.py:列出列表前3位和后3位的球员名称。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51068.jpg?sign=1739544875-5MNmz0QbrpNXiakIbBjhtA1zbYXC7x3p-0-a47cab6346571b9a41103c0b781f3375)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51074.jpg?sign=1739544875-qWIFakb7KPmMfwqKlAakb5afnitLoLMc-0-02427d572735f937a79e2d4299714ef3)
这个观念其实很有用,例如,你设计一个学习网站,想要每天列出前3名学生基本数据同时表扬,可以将每个人的学习成果放在列表内,同时用降幂排序方式处理,最后可用本节观念列出前3名学生资料。
注:升幂是指由小到大排列。降幂是指由大到小排列。
7-1-5 将for循环应用在数据类别的判断
程序实例ch7_7.py:有一个files列表内含一系列文件名,请将“.py”的Python程序另外建立到py列表,然后打印。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51079.jpg?sign=1739544875-Fx50JUkr4yK6blKxhuVLevIgj5rPQutK-0-b805918ae71cd6c7fcb4276e115be3d6)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51085.jpg?sign=1739544875-FatHcYmJRTeMjqwEZMPzL2Zsz8iLc1xo-0-43cf9f39f6209dbff148ca75bea39fd7)
程序实例ch7_8.py:有一个列表names,元素内容是姓名,请将姓洪的成员建立在lastname列表内,然后打印。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51088.jpg?sign=1739544875-99E9z82ClvgB7RIeB8TpekdCPQAhNz5q-0-7fb82ea9ece539c7c4e1391ac0461a41)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51094.jpg?sign=1739544875-RNiY9MqI5AY0x5in2iRvvWMrNAE2UyK4-0-3f6688f1c3c46b54d989c160c6d52ea9)
7-1-6 删除列表内所有元素
程序实例ch7_9.py:Python没有提供删除整个列表元素的方法,不过我们可以使用for循环完成此工作。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51502.jpg?sign=1739544875-ZCQQYVguaCEs9JxM13CQeXM4Y49lww7e-0-29e6022a24daf7dbe0c58db8284d42b8)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51508.jpg?sign=1739544875-EkJ4sfNNhdNUYui2pWY72l9LHXYAfRTY-0-8b43e376da4d777cb8c83abd413fdc06)