![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=1739663071-aQZD7vHil7s7YDWTJpNItVMLt3FEDDgE-0-f2689d52fb1576d2ff03ee73b7f0477b)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P87_50246.jpg?sign=1739663071-oHA13zIncoflcAFotSWrlCbhLnw6sHIq-0-6d9ffe0d55702f1256b5a7897d931199)
上述程序执行的观念是,当第一次执行下列语句时:
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=1739663071-MB4uCznWV3WiqkpgBrTWV64HEtAhp9wl-0-d31a2217a92a0061c193b60493b406c7)
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=1739663071-Otr4GaVAxlkbPFybEqKX45bOP4J3HFpo-0-523cf42cbb0bf94fcdafac0e1d5e5bf1)
执行结果 与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=1739663071-Jks6FmDmMySakWQnyKfd5p0oL8FgCmB6-0-bbe1c024cd4a1719776e93babe9a2a58)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51064.jpg?sign=1739663071-assX4FUfNnAoFwfLeWu8v4kIfywAMkvX-0-92d46e72ac7f9aefc1b6c3fbfdf07e7f)
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=1739663071-u0ZKDkezDfmGEYfPitBck0tt58PI1lbK-0-a13f22872d5740e68db355b1544b8e13)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51074.jpg?sign=1739663071-26mSRcc7kWJIFfXstBkSiYKa7xD4m0Ri-0-5eab82ed1195f4130444b3ab84de664e)
这个观念其实很有用,例如,你设计一个学习网站,想要每天列出前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=1739663071-UAfRF5PGZiKPfY5dTPW3q444tYZcquNh-0-b9b74d8734a22232a03a36bd7fb8dfe7)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51085.jpg?sign=1739663071-6DUOes20i15xfjJQToqP3bdLqJtMMQVo-0-f0706ec3289e2b57ea52339e4635aa05)
程序实例ch7_8.py:有一个列表names,元素内容是姓名,请将姓洪的成员建立在lastname列表内,然后打印。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51088.jpg?sign=1739663071-OZlbfTmNGnVq4GNc3pzA3ZvJQXAP3oju-0-e8302b6574edb1961dd4a827600e0f70)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51094.jpg?sign=1739663071-tqDmmBbH97c40oCjsMtXQWafkCN1JEfz-0-cba0a8b4acd2d7cbff3a3649e57baec2)
7-1-6 删除列表内所有元素
程序实例ch7_9.py:Python没有提供删除整个列表元素的方法,不过我们可以使用for循环完成此工作。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51502.jpg?sign=1739663071-DdocgtzBqhPEmCm3If5bZ5BdsMKT0Fgm-0-2fbcf720fada16037d8e9caed92867ba)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51508.jpg?sign=1739663071-iMf1fRVmJO2VYJrHVJEv4ryKatyxrrHa-0-90b1699ffdaad81bc8ccec0389445366)