![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=1739226315-UbEEWNUxwCOdoJWZGHWNKgxK6UDP7wXd-0-b493620f2d8af84437a4e35141dce700)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P87_50246.jpg?sign=1739226315-K14c6f2pHEiZ4DFkns1ZRZXJqMa5mc5v-0-d01493e68d086c9c6601ad1058ef269a)
上述程序执行的观念是,当第一次执行下列语句时:
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=1739226315-toj8qkoPH2hQgSdPPxgsCFzugfehkz0t-0-50f42c383a3b4c028d96db6aa470ed76)
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=1739226315-W1K17Qh6zUY4gdGRY6YVLLhf3JAANaIT-0-f8f404bae314821f4e5cd5057508a21e)
执行结果 与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=1739226315-LfWeP2o6i9MeySBjdpSwerEBiOEhSbcO-0-d8c0e1c86ec5cc4cdec5fbf55010756e)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51064.jpg?sign=1739226315-7M2hfsmz5bM4ORYdrSwSboNcpXa5s6rj-0-20f48bf6d100eeffe0250c454c0abefe)
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=1739226315-f9StC1nsD7cYHzID0YUCblS07zKE5fio-0-8a3b9ee05bc7265a05813807e8539bd0)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51074.jpg?sign=1739226315-G2uaoSw9Wan2chPMwMaOjFvL5LmzKhid-0-b839e136bc877ecf69d9ccf9b4e5014d)
这个观念其实很有用,例如,你设计一个学习网站,想要每天列出前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=1739226315-AEsAoV0ax93I02xb9By9Xv1pV0Hwkdl9-0-dd02e6581ed61146e4f8769786351dfd)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51085.jpg?sign=1739226315-ewYhlimyY1GU8b0kcVoKkt4WIJS5i4de-0-95b815365853a2d08c69635ce8b638f9)
程序实例ch7_8.py:有一个列表names,元素内容是姓名,请将姓洪的成员建立在lastname列表内,然后打印。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51088.jpg?sign=1739226315-MF1xYOyBhQ6t6TzechrTYAYQZhr4k8GO-0-e4d8e56d42417f71f52ba96a78f55522)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P89_51094.jpg?sign=1739226315-FIjhdG0EdanjIaCivdDqedxapJlXGcO7-0-b49090ae6c342d3d557891fa2cd2d495)
7-1-6 删除列表内所有元素
程序实例ch7_9.py:Python没有提供删除整个列表元素的方法,不过我们可以使用for循环完成此工作。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51502.jpg?sign=1739226315-LFyFy24cIG0OHvFUuT1BfAF04mE1VFV6-0-4b5361d4e3f35d9d1011af5060b987fe)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P90_51508.jpg?sign=1739226315-28hOfrp0hYDNjR8hd7Z4lBhdYTYGIG3v-0-41e867bbe3c09721012594b49d91a902)