Tutorial

如何在Python3中构造“for循环”

Published on November 14, 2019
中文
如何在Python3中构造“for循环”

在计算机编程中,运用循环语句可以让我们自动化、重复多次执行相似的任务。在这个教程里,我们将介绍Python中的for循环

一个for循环,对于“代码的重复执行”的实现,是基于循环计数器或循环变量。这意味着:最常使用for循环的情况,是在进入循环之前已经知道需要重复的次数。这与“以终止条件决定何时终止循环”的 while 循环 不同。

for循环

在Python中, for 循环用以下的格式构造:

for [循环计数器] in [循环序列]:
    [执行循环任务]

[循环任务]在循环序列用尽之前,将会将一直被执行。

我们来看看这个例子中,如何用for循环去重复打印一个区间内的所有数字:

for i in range(0,5):
   print(i)

当我们运行程序,会得到以下的结果:

Output
0 1 2 3 4

这个for循环用i作为它的循环参数,数字区间为0到5。

循环之中的每次迭代,我们打印出一个数字。请注意在大多数编程中,我们常常用0作为索引(index)的起始,这是“打印出5个数字是0到4”的原因。

当程序需要多次重复代码块时,for循环常被用到。

用range()函数进行For循环

Python的内置类型中,有一个“不可变序列”是range()。在循环中,range()被用于控制循环重复的次数。

当使用range()时,你可以传进1到3个参数:

  • start “起始值”决定这序列起始的数字,如果没有提供这个值,那么start将默认从0开始
  • stop “终止值”是必需参数,它决定了循环在哪个数字终止(终止于到达这个数字前,因此不包含这个数字本身)
  • step “步长”设定了数字在下一次迭代中“增加的幅度”(在负数的情况下,则为“减少的幅度”),如果没有提供这个参数则默认值为1

接下来,我们看几个传入不同参数进入range()的例子。

首先我们仅传入stop参数(唯一的必需参数),这样我们的序列被设置为 range(stop)

for i in range(6):
   print(i)

在以上程序中,stop参数为6,因此代码会在0-6之间迭代(不包括6本身):

Output
0 1 2 3 4 5

接下来我们看看range(start, stop)的例子,这个用法决定了迭代从何时开始以及何时结束:

for i in range(20,25):
   print(i)

这里,循环的范围从20(包括20)到25(不包括25),因此输入结果如下:

Output
20 21 22 23 24

range()中的step参数类似于指定步幅进行字符串切割,可用于跳过序列中的某些值。

当使用所有三个参数时,step将作为最后一个参数:range(start, stop, step)。首先我们开看看step是正数的情况:

for i in range(0,15,3):
   print(i)

在这个情况下,for循环被设置为打印出0到15直接的数字,但因为step是3,因此每隔三个数字打印一次,结果如下:

Output
0 3 6 9 12

我们同样可以把step设置为负数用于反向循环(从大到小、从后往前的循环),但在这种情况下我们要相应地更改startstop参数:

for i in range(100,0,-10):
   print(i)

这个情况下,start值是100,stop值是0,步长范围是-10。因此循环从100开始,到0结束,每次迭代减少10。我们可以看到以下的运行结果:

Output
100 90 80 70 60 50 40 30 20 10

在Python编程中,range()序列类型经常被用作for循环的参数:

使用“序列数据类型”的For循环

列表 和其它序列数据类型同样可以作为for循环的迭代参数。除了用range()进行循环,你同样可以定义一个列表并且迭代这个列表。

我们将会把一个列表分配给一个变量,然后循环迭代这个列表:

sharks = ['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem']

for shark in sharks:
   print(shark)

在这个例子中我们打印出列表中的每个项目。虽然我们用shark作为此处的变量,但我们同样可以用任何其他符合规范的名称作为变量名合法的变量名 运行结果如下所示:

Output
hammerhead great white dogfish frilled bullhead requiem

以上的结果表明for循环对于列表进行了迭代,并且将列表中的每个项目用一行来打印。

列表和其它的“序列”数据类型 比如 strings以及tuples(元组)都常常被用于循环,因为他们有“可被迭代”的特性。你可以组合这些数据结构与range()协同,去在列表中增加项目。例子如下:

sharks = ['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem']

for item in range(len(sharks)):
   sharks.append('shark')

print(sharks)
Output
['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

此处我们将'shark'作为占位字符串,在sharks列表中增加了n次'shark'(n为起始时sharks列表中项目的总数/列表原长)

我们也可以用for循环从头开始构建一个列表:

integers = []

for i in range(10):
   integers.append(i)

print(integers)

在这个例子中,integers列表初始化为空,但接下来的for循环生成了如下的列表:

Output
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

与之相似,我们可以迭代字符串:

sammy = 'Sammy'

for letter in sammy:
   print(letter)
Output
S a m m y

迭代tuples(元组)可通过和以上“迭代列表”和“迭代字符串”同样的格式进行实现。

当迭代一个dictionary(字典)时,请谨记“键值对”(key:value)的结构,去保证调用字典中正确的元素。以下是调用“键”和“值”的例子:

sammy_shark = {'name': 'Sammy', 'animal': 'shark', 'color': 'blue', 'location': 'ocean'}

for key in sammy_shark:
   print(key + ': ' + sammy_shark[key])
Output
name: Sammy animal: shark location: ocean color: blue

当循环“字典”类型时,循环参数对应字典的“键”(key),字典参数[循环参数]对应“值”(value)。在以上的例子中,循环参数key被用来代表“键”, and sammy_shark[key]被用来代表“值”。

循环常用于迭代和操控“序列数据类型”。

嵌套循环

和其它编程语言一样,Python中的循环同样可以嵌套。

一个“嵌套循环”是“在一个循环中包含了另一个循环”,结构类似于嵌套if语句 嵌套循环用以下格式构建:

for [first iterating variable] in [outer loop]: # Outer loop
    [do something]  # Optional
    for [second iterating variable] in [nested loop]:   # Nested loop
        [do something]  

程序首先遇到外循环,执行第一次迭代。第一次迭代触发内部嵌套循环,然后运行完成。接下来程序返回到外部循环的顶部,完成第二次迭代并再次触发嵌套循环。和之前一样嵌套循环完成运行,程序返回到外部循环的顶部直到整个序列执行完毕,或是遇到break及其他打断进程的语句。

我们来实现一个嵌套for循环,去更加深入地理解。在这个例子中,外循环将迭代一个名为num_list的列表,而内循环将迭代一个名为alpha_list的字符串。

num_list = [1, 2, 3]
alpha_list = ['a', 'b', 'c']

for number in num_list:
    print(number)
    for letter in alpha_list:
        print(letter)

当我们运行程序将得到以下结果:

Output
1 a b c 2 a b c 3 a b c

输出的结果说明了:程序首先通过打印1完成外循环的迭代,接下来通过连续打印 a, b, c完成内循环。当内循环完成后,程序返回外循环的顶部,打印2,接着再次打印内循环的内容(a, b, c),继续循环往复。

嵌套for循环可用于迭代“由列表组成的列表(列表中的每个元素/项目是一个列表))”。再这样“由列表组成的列表”中,如果我们仅用一次for`循环,程序将打印出作为每个项目的内部列表:

list_of_lists = [['hammerhead', 'great white', 'dogfish'],[0, 1, 2],[9.9, 8.8, 7.7]]

for list in list_of_lists:
    print(list)
Output
['hammerhead', 'great white', 'dogfish'] [0, 1, 2] [9.9, 8.8, 7.7]

为了获得每个内部列表之中的项目,我们需要再次运用一个嵌套的for循环:

list_of_lists = [['hammerhead', 'great white', 'dogfish'],[0, 1, 2],[9.9, 8.8, 7.7]]

for list in list_of_lists:
    for item in list:
        print(item)
Output
hammerhead great white dogfish 0 1 2 9.9 8.8 7.7

当我们运用嵌套for循环时,我们可以迭代(组成总列表的)单个列表之中的项目。

我们可以看到嵌套for循环被用在我们教程中的一个实用案例之中自然语言处理工具包 (NLTK).

总结

这个教程中,我们介绍了Python中的for循环如何工作,以及如何构造它们。For循环会连续循环多次执行(被提供的)代码块。

从这里开始,你可以继续学习循环相关的教程 while循环break, continue,和pass 语句.

若想在实际项目中练习运用for循环,请参照以下几个教程:

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Default avatar
Gongxia Chen

translator


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel