前言
在看了上一篇列表简介之后,你应该对列表有了初步的了解,知道了怎么创建和操作列表元素。不知道你有没有想过,上篇文章的操作列表元素是基于“我们已经知道列表元素内容和列表元素数量很少”的前提下,如果现在有个列表,我们不知道它有多少个元素,或者列表中含有一百万个以上的元素我们怎么对其进行操作?
在本文中,你将学习如何遍历整个列表,遍历列表就是循环操作列表中的每个元素,这在Python中只需要几行代码,非常的easy!
1. 遍历整个列表
事实上,我们经常需要循环列表并对其中每个元素执行相同的操作。
比如,我们有个魔术师名单,现在需要你讲其中每个魔术师的名字都打印出来。
名单如下:
magicians = ['Kelvin', 'Vicky', 'Howord']
你看到这个名单以后肯定觉得
于是你吭哧吭哧地写了起来,运行前面你学到的知识,你写出来的代码是这样的:
magicians = ['Kelvin', 'Vicky', 'Howord']
print(magicians[0])
print(magicians[1])
print(magicians[2])
运行这段代码,结果如图1-1:
表面上看你得到了正确的结果,当然,实际上你得到的也是正确的结果。
但是我们说,这样写的代码并不好,为什么?因为它不够健壮、不够灵活。
现在如果我改需求(产品经理上身):魔术师名单上有100位魔术师,现在需要你把每个魔术师的名字打印出来,你就要写 print(magicians[0]) ~ print(magicians[99])
100遍。
我要是再丧心病狂地让你在魔术师名字前加上 hello,你就要改100遍代码。
可能对有些耐心极好的人来说,100遍也可以接收。
那我列表如果是1000个人、10000个人、100000个人呢?还可能更多。相信就算是如来佛祖来了都受不了。
扯了这么一大堆,是想说明一点:如果列表中元素执行相同的操作,用循环简直能让人增寿。
下面用 for
循环来打印魔术师名单中的所有名字:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician)
运行这段代码,结果图1-2和图1-1一样:
结果是一样的,不一样的是:倘若将来列表中魔术师变成了一百万甚至一千万个,for
循环的代码一点都不需要改变,是不是很棒?!haha~
如果有人再桑心病狂地让你在每个魔术师名字前加上 hello,你只需要把上面的第三行代码改成 print("Hello, " + magician)
就可以了,不管魔术师有多少个,只需要改一行。
好了,现在我来解释一下 for
循环代码:首先,我们定义了一个列表,这个在之前的文章讲过,不懂的可以看我之前的文章或者关注公众号 猿天罡 ;接下来,我们定义了一个 for
循环,看第二行代码,这行代码让Python从列表 magicians
中取出一个名字,并将其存储在变量 magician
中;最后我们让 Python 打印前面存储到变量 magician
中的名字。对于列表中的每个名字,Python都将重复执行第二行和第三行的代码。
2. 深入地研究循环
循环这种概念很重要,因为它是让计算机自动完成重复工作的常见方式之一。
让我们再把上面的 for
循环拿出来讲讲其中的语法和语义:
在前面的打印魔术师名单的简单循环中,Python首先读取其中的第一行代码:
for magician in magicians:
这行代码让 Python 获取列表 magicians
中的第一个值 Kelvin
,并将其存储到变量 magician
中。接下来, Python 读取下一行代码:
print(magician)
它让 Python 打印 magician
的值——当然是 Kelvin
。
因为该列表还包含其他值, 循环没有执行完,所以 Python 返回到循环的第一行:
for magician in magicians:
Python 获取列表中下一个魔术师的名字 Vicky
,并将其存储到变量 magician
中,再执行下面这行代码:
print(magician)
Python 再次打印变量 magician
中的值——此时是 Vicky
。接下来, Python 再次执行整个循环,对列表最后一个值—— Howord
进行处理。
至此,列表中没有其他的值了,因此 Python 接着执行下一行代码。
在举的栗子中,for
循环后面没有其他的代码,因此程序就此结束。
注意事项:
- 使用循环时,对列表中的每一个元素,都将执行循环指定的步骤(如栗子里的,
print(magician)
),而不管列表包含多少个元素。如果列表包含一百万个元素,Python 就重复执行指定的步骤一百万次,且通常执行的速度非常快,不信你可以试试。 - 编写
for
循环时,对于用于存储列表中每个值的临时变量(如栗子里的,magician
),可随意取名。但我们建议取有意义的名称,别人看代码的时候好理解。
3. 在 for
循环中执行更多的操作
在 for
循环中,可对每个元素执行任何操作。
比如,我们有个魔术师列表,现在需要你对于每个魔术师打印一条信息,指出他们的表演很精彩:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
运行这段代码,结果如图3-1:
相比于前一个示例,唯一不同的是对于每位魔术师,都打印了一条以其名字开头的消息。
在 for
循环中,想包含多少行代码都可以。
在代码 for magician in magicians:
后面,每个缩进的代码行都是循环的一部分,并且对列表中的每个元素都执行一次。
因此,可对列表中每个值执行任意次数的操作。
举例说明,在上面示例的基础上,告诉每个魔术师,你期待他的下次表演:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
print("I can't wait to see u next trick, " + magician.title() + "\n")
由于两条 print
语句都缩进了,因此它们将针对列表中每个元素都执行一次。
第二个 print
语句里的 \n
表示 换行。
运行这段代码,结果如图3-2:
实际上,在大多数时候,在 for
循环中一行代码解决不了问题,你会发现使用 for
循环对每个元素执行众多不同的操作很有用。
4. 在 for
循环结束后执行一些操作
for
循环结束后再怎么做?通常,你需要提供总结性输出或者接着执行程序必须完成的其他任务。
在 for
循环后面,没有缩进的代码都只执行一次,且不会重复执行。
比如,还是魔术师列表,向每位魔术师表示期待下次表演后,打印一条向全体魔术师致谢的消息,感谢他们的精彩演出:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
print("I can't wait to see u next trick, " + magician.title() + "\n")
# 没有缩进,在循环结束后仅执行一次
print("Thank u, everyone, That was a great magic show!")
运行这段代码,结果如图4-1:
从结果可以看出,由于第三个 print
语句没有缩进,因此只执行了一次。
结尾语
看到这里,你心里应该对遍历列表有了点数,作为初学者,先不要深究其原理,首先要做的是把这语法记住,然后写几个栗子,做到熟练运用,到了一定的地步,你会豁然开朗、融会贯通的。
如果你在学习过程中有任何疑问,可以关注文章下方↓↓↓的公众号及时与我联系,我们相互讨论,共同学习。
最后,祝你学有所成。