遍历整个列表

你经常需要遍历列表的所有元素,对每个元素执行相同的操作。

在游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字的列表,可能需要对每个元素执行相同的统计运算;

在网站中,可能需要显示文章列表中的每个标题。需要对列表中的每个元素都执行相同的操作时,可使用Python中的for循环。

假设我有一个魔术师名单,需要将其中每个魔术师的名字的打印出来。为此,我们可以分别获取名单中的每个名字,但这种做法会导致多个问题。如果名字很长,将包含大量重复的代码。另外,每当名单的长度发送变化时,都必须修改代码, 那么我们通过for循环来完成。

magicians.py

首先,我们先定义了一个列表(见1)。定义了一个for循环(见2)。让Python列表magicians中取出一个名字,并将其存储在变量magician中。最后,我们让Python打印前面存储到变量magician中的名字(见3)。对于列表magicians中的每位魔术师,都将其名字打印出来。

深入地研究循环

循环这种概念很重要,因为它是让计算机自动完成重复工作的常见之一。在前面的magicians.py中使用的简单循环中,Python将首先读取其中的第一行代码:

for magician in magicians:

这行代码让Python获取列表magicians中的第一个值(‘alice’),并将其存储到变量magician中,然后,Python读取下一行代码:

print(magician)

它让Python打印magician的值——依然是‘alice’。该列表中还包含其他值,Python返回到循环的第一行:

for magician in magicians:

Python获取列表中的下一名字——‘cyril’,并将其存储到变量magician中,在执行下面这行代码:

    print(magician)

在for循环中执行更多的操作

在for循环中,可对每个元素执行任何操作。

唯一的不同是对于每位魔术师,都打印了一条以其名字为抬头的消息。这个循环第一次迭代时,变量magician的值为‘alice’,因此Python打印的第一条消息的抬头为‘Alice’。在for循环中,想包含多少行代码都可以。在代码行for magician in magicians后面,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。

在for循环结束后执行一些操作

由于两条print()语句都缩进了,都将针对列表中的每位魔术师执行一次。第二条的print语句中的换行符“\n”,在每次迭代结束后都插入一个空行。

在for循环后面, 没有缩进的代码都只执行一次,而不会重复执行。

避免缩进错误

忘记缩进

对于位于for语句后面且属于循环组成部分的代码行,一定要缩进。如果你忘记缩进,Python会提醒你:

忘记缩进额外的代码行

有时候,循环能够运行而不会报错误,但结果可能会出意外。试图在循环中执行多任务,却忘记缩进其中一些代码行时,会出现这种情况:

这是个逻辑错误。从语法上看,是合法的。但由于存在逻辑错误,结果并不符合预期。

不必要的缩进

如果你不小心缩进了无需缩进的代码行,也会报错误。为避免意外缩进错误,请只缩进需要缩进的代码,只有要在for循环中对每个元素执行的代码需要缩进。

循环后不必要的缩进

如果你不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。在有些情况下,可能导致报告语法错误。跟上述的错误类似。Python不知道你的本意,只要代码符合语法,就运行。如果原本只应执行一次的操作执行了多次,请确定你是否不应该缩进执行该操作的代码。

遗漏了冒号

for语句末尾的冒号告诉Python,下一行是循环的第一行。

如果你不小心遗漏了冒号,将导致语法错误,这种错误难以消除,但并不那么容易发现。

创建数值列表

使用函数range()

Python函数range()让你能够轻松地生成一系列的数字。

上述代码好像应该打印数字1~5,但实际上它不会打印数字5;

使用range(),如果输出不符合预期,请尝试将指定的值加1或减1.

使用range()创建数字列表

要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表。

如下图,函数range()从2开始数,然后不断加2,直达到或超过终值(22):

使用函数range()几乎能够创建任何需要的数字集,如何创建一个列表,其中包含前10个整数的平方呢?在Python中,两个星号(**)表示乘方运算。

对数字列表执行简单的统计计算

有几个专门用于处理数字列表的Python函数。可以轻松找出数字列表的最大值、最小值和总和;

列表解析

**  要使用这种语法,首先指定一个描述性的列表名,如squares;然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。表达式为values2,计算平方值。编写一个for循环,用于给表达式提供值,再加上右方括号。**



  ** for循环为for value in range(1,11),将值1-10提供给表达式value 2.请注意,这里的for语句末尾没有冒号;**