![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=1739687308-PGwIWrK9kXbRm4GCRLnuYZuqz4uElzbc-0-02112de860ea278c98b11690a34bfebc)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P87_50246.jpg?sign=1739687308-yKouUuosycewOOL0ZwDse31xROqPLWEj-0-f29038a79dfa3715f7bfa6089927340f)
上述程序执行的观念是,当第一次执行下列语句时:
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=1739687308-sXRra8t34EctUKewvUfJDH7wT9PpAEab-0-e7abb394ce15618fe97ff5e1a773a0e1)
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=1739687308-heSol73UpqtJ04mLdFxst4dJPpPo3At9-0-fc3fc93098d230f72798464ab5f24a8f)
执行结果 与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=1739687308-g8UU6dCrq0wUVrZPcjsXoYPq99fP0UWO-0-df5a0572a693b14975f14ee462295531)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51064.jpg?sign=1739687308-0tsIBmMJVtDpHK5H97I1DqGntStIxNBH-0-be0df6bc45e2915198353d1eeea04693)
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=1739687308-mhlgbgILUpQyKDpFlHVBNKfDysJqIzu2-0-2500ad1699b678f2c93a5d283df56f18)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51074.jpg?sign=1739687308-7SL6ERt0Jmq9vI7QRJw8890NURsQ4Uk8-0-7485af92b96f4185387803c7354a603b)
这个观念其实很有用,例如,你设计一个学习网站,想要每天列出前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=1739687308-kmhqRVrPVLiWkLVavKUoPpRpPTR5Xrb4-0-ef4da66bac9a694edc0245be7500c6be)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51085.jpg?sign=1739687308-k0Jubr9UB0iL4ph9VEI1T00otCz63muA-0-38ffb9b50c47df8a6cf484a944ea0d59)
程序实例ch7_8.py:有一个列表names,元素内容是姓名,请将姓洪的成员建立在lastname列表内,然后打印。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51088.jpg?sign=1739687308-oPoUKKKMboS7dvyQLAjehze7VYhmXepo-0-45ec4152d88d91e1634b894b88658ce5)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51094.jpg?sign=1739687308-ffu52DYklH1OYKz8Mrp9WTzXiQvE8rRE-0-3b8e5915131b37cbf5dd80179a7ff674)
7-1-6 删除列表内所有元素
程序实例ch7_9.py:Python没有提供删除整个列表元素的方法,不过我们可以使用for循环完成此工作。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51502.jpg?sign=1739687308-qGIb7hClz8za9V05uqiyOojQcDgZ1Z1J-0-4e6358a19fb3585f65944333923f49db)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51508.jpg?sign=1739687308-ZGWVaTw8f5KAfCZVa98eZpEAQHgybVWP-0-48b195e56d8ba3459e45ef5fd4112eb7)