跳转到内容

面向非程序员的 Python 3 教程/For 循环

来自维基教科书,开放的书籍,开放的世界

使用 for 循环,我们可以重复一段代码。让我们看一个例子

one_to_ten = range(1, 11)
for count in one_to_ten:
    print(count)

这段代码的输出如下所示

1
2
3
4
5
6
7
8
9
10

输出看起来非常熟悉,但程序代码看起来不同。第一行使用 range 函数。range 函数使用两个参数,如下所示 range(start, finish)start 是生成的第一个数字。finish 比最后一个数字大 1。请注意,这个程序可以用更短的方式完成

for count in range(1, 11):
    print(count)

range 函数返回一个可迭代对象。可以使用 list 函数将其转换为列表,这将成为主导数字。以下是一些示例,说明 range 命令是如何工作的

>>> range(1, 10)
range(1, 10)
>>> list(range(1, 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(-32, -20))
[-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]
>>> list(range(5,21))
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(21, 5))
[]

下一行 for count in one_to_ten: 使用 for 控制结构。for 控制结构看起来像 for variable in list:list 从列表的第一个元素开始遍历到最后一个元素。当 for 遍历列表中的每个元素时,它将每个元素放入 variable 中。这允许 variablefor 循环每次运行时使用。以下是一个示例(您不必输入它)来演示

demolist = ['life', 42, 'the universe', 6, 'and', 7, 'everything']
for item in demolist:
    print("The current item is:",item)

输出是

The current item is: life
The current item is: 42
The current item is: the universe
The current item is: 6
The current item is: and
The current item is: 7
The current item is: everything

请注意,for 循环如何遍历列表并将每个元素设置为 item。那么,for 有什么用呢?第一个用途是遍历列表的所有元素并对每个元素执行某些操作。以下是一种快速添加所有元素的方法

list = [2, 4, 6, 8]
sum = 0
for num in list:
    sum = sum + num

print("The sum is:", sum)

输出只是

The sum is: 20

或者,您可以编写一个程序来找出列表中是否存在重复项,就像这个程序一样

list = [4, 5, 7, 8, 9, 1, 0, 7, 10]
list.sort()
prev = None
for item in list:
    if prev == item:
        print("Duplicate of", prev, "found")
    prev = item

以及为了确保

Duplicate of 7 found

好的,那么它是如何工作的呢?以下是一个特殊的调试版本,可以帮助您理解(您不必输入它)

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print("l = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tl:", l)
l.sort()
print("l.sort()", "\t\tl:", l)
prev = l[0]
print("prev = l[0]", "\t\tprev:", prev)
del l[0]
print("del l[0]", "\t\tl:", l)
for item in l:
    if prev == item:
        print("Duplicate of", prev, "found")
    print("if prev == item:", "\t\tprev:", prev, "\titem:", item)
    prev = item
    print("prev = item", "\t\tprev:", prev, "\titem:", item)

输出是

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]        l: [4, 5, 7, 8, 9, 1, 0, 7, 10]
l.sort()                l: [0, 1, 4, 5, 7, 7, 8, 9, 10]
prev = l[0]             prev: 0
del l[0]                l: [1, 4, 5, 7, 7, 8, 9, 10]
if prev == item:        prev: 0         item: 1
prev = item             prev: 1         item: 1
if prev == item:        prev: 1         item: 4
prev = item             prev: 4         item: 4
if prev == item:        prev: 4         item: 5
prev = item             prev: 5         item: 5
if prev == item:        prev: 5         item: 7
prev = item             prev: 7         item: 7
Duplicate of 7 found
if prev == item:        prev: 7         item: 7
prev = item             prev: 7         item: 7
if prev == item:        prev: 7         item: 8
prev = item             prev: 8         item: 8
if prev == item:        prev: 8         item: 9
prev = item             prev: 9         item: 9
if prev == item:        prev: 9         item: 10
prev = item             prev: 10        item: 10

我在代码中添加了这么多 print 语句,是为了让您看到每行代码正在发生什么。(顺便说一句,如果您无法弄清楚为什么程序无法运行,请尝试在您想知道正在发生什么的地方添加大量 print 语句。)首先,程序从一个普通的旧列表开始。接下来,程序对列表进行排序。这样,任何重复项都会放在一起。程序然后初始化一个 prev(ious)变量。接下来,删除列表的第一个元素,这样就不会错误地认为第一个项目是重复的。接下来,进入 for 循环。检查列表中的每个项目,看它是否与上一个相同。如果是,则发现重复项。然后,更改 prev 的值,以便下次运行 for 循环时,prev 是当前项的上一项。果然,发现 7 是重复的。(请注意,\t 用于打印制表符。)

使用 for 循环的另一种方法是执行某些操作一定次数。以下是一些代码,用于打印出斐波那契数列的前 9 个数字

a = 1
b = 1
for c in range(1, 10):
    print(a, end=" ")
    n = a + b
    a = b
    b = n

令人惊讶的输出是

1 1 2 3 5 8 13 21 34

for 循环可以做的一切,while 循环也可以做到,但 for 循环提供了一种简单的方法来遍历列表中的所有元素或执行某些操作一定次数。

面向非程序员的 Python 3 教程
 ← 列表 For 循环 布尔表达式 → 
华夏公益教科书