原文: Python For Loop – Example and Tutorial

循环让你控制你的程序的逻辑和流程结构。

具体来说,for 循环让你执行一个类似的代码块,一遍又一遍,直到满足一个条件。

你对你确定的一组数值重复某些代码指令,并对每个数值执行预先确定的次数的操作。

Python 中的 for 循环是什么

for 循环可以遍历一个列表中的每一个项目,或者遍历一个字符串中的每一个字符,直到遍历完每一个字符才停止。

编写 for 循环有助于减少代码中的重复性,遵循 DRY(Don't Repeat Yourself)原则。你不会多次编写相同的代码块。

在这篇文章中,我们将通过不同的例子来了解 Python 编程语言中 for 循环的基本知识。但首先让我们学习一些 for 循环的基础知识。

for 循环在其他编程语言中是如何工作的

在大多数现代编程语言中,如 JavaScript、Java 或 C 语言中的循环看起来就像下面的例子。

JavaScript 中的循环:

for (let i = 0; i < 10; i++) {
  console.log('Counting numbers');
  // 打印 10 次 “Counting numbers”
  // i 的值从 0 到 9
  }

for 循环一般跟踪三件事:

  • 初始化表达式语句,let i = 0;
  • 需要满足的条件,i < 10;,这个条件被评估为 truefalse。如果它是 false,循环就会被终止。
  • 如果条件为 true,循环的主体将被执行,初始化的表达式将采取一些行动。在这种情况下,它将以 1(i++)递增,直到满足条件。

Python 中的 for 循环语法

与其它编程语言相比,Python 中的 for 循环看起来非常不同。

Python 以可读性为荣,所以它的 for 循环更干净、更简单、更紧凑。

其基本结构是这样的:

for item in sequence:
    execute expression

其中:

  • for 开始一个 for 循环。
  • item 是每个迭代过程中的一个单独项目。它被赋予一个临时的任意变量名。
  • in 将每个项目与其他项目分开。
  • sequence 是我们想迭代的内容。
  • 冒号 : 表示执行后面代码正文的指令。
  • 一个新行。
  • 一个缩进,在写循环的主体之前有 4 个空格,否则我们会得到一个 IndentationError
  • execute experssion 包含需要采取和重复的行动的主体(例如,向控制台打印东西)。

Python for 循环如何工作

假设我们有一个序列,一个我们想要运行的存储项目的列表——在本例中是一个食品杂货清单:

groceries = ["bananas","butter","cheese","toothpaste"]

in 关键字检查一个项目是否包含在一个序列中。当与 for 关键字结合时,它表示对序列中的每个项目进行迭代。

它对列表中的每一个项目都做一些处理。在这种情况下,它将每个单独的项目分别打印到控制台,直到每个项目都被迭代过。

for grocery in groceries:
    # 对于每个迭代,打印 grocery 的值
    print(grocery)

grocery 是一个临时变量名,用来指代列表中的每个项目。

它是一个迭代器变量 iterator variable,随着每次连续的迭代,它的值被设置为列表中的每个值。本质上,它是一个具有临时值的临时变量。

我们可以随心所欲地命名它,比如 gitem。但是这个名字应该是唯一的,不能与我们程序中的任何其他变量相同。

在第一次运行时,第一个元素--bananas--被存储在变量 item 中。

然后是表达式 print(grocery),本质上就是执行 print("bananas")

在第二次运行时,元素 butter 被存储在变量 item 中,如上所述,它被打印到控制台。

这个过程一直持续到所有项目都被迭代完毕。

下面是这段代码的输出:

bananas
butter
cheese
toothpaste

如何对一个数字范围使用 for 循环

我们可以使用 range() 函数,用一个给定的范围,指定我们希望 for 循环迭代的次数。这就简化了 for 循环的操作。

range() 函数根据我们给它的参数创建一个整数序列。

它是如何工作的呢?

请看下面的例子:

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

输出是:

0
1
2
3
4

它创建一个 0 到 4 之间的数字列表。

默认情况下,当我们给 range() 一个参数时,该范围从 0 开始计数。

请注意,5 没有被打印到控制台。

range(5) 中,我们指定 5 是我们想要的最大的数字,但不包括在它。它只是一个停止点。定义了我们希望我们的循环运行多少次。我们看到代码运行了 5 次,并创建了一个包括 5 个项目的列表:0,1,2,3,4

如果你想看看 range() 产生了什么,以达到调试目的,你可以把它传给 list() 函数。

在你的控制台中打开交互式 Python shell,通常使用 python3 命令,然后输入:

show_numbers = list(range(5))

print(show_numbers)

如果我们想让范围从 1 开始,然后也看到 5 被打印到控制台,该怎么做呢?这次我们给 range() 两个不同的参数:

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

输出:

1
2
3
4
5

第一个参数(start),正如我们前面看到的,是可选的,是序列应该从哪里开始(在这个例子中是 1)。这个参数指定的数字被包括在内。

第二个参数(stop)是必须的,是序列应该结束的地方,如前所述,它指定的数字不被包括在内。在这个例子中,它是 6。

最后,你可以传入第三个可选参数:step

这控制了范围内两个值之间的增量。step 的默认值是1。

假设我们想每两个数字取一次,从一个序列中得到奇数。我们可以这样做:

for i in range(1,10,2):
    print(i)

输出:

1
3
5
7
9

1 是我们开始的地方,10 减去 1 就是我们想要的数字(也就是 9),2 是我们想要在数字之间增加的数量(在这种情况下,我们每两个数字取一次)。

如何在 Python 中使用 enumerate()

到目前为止,我们在迭代时没有使用任何索引。有时,我们需要访问正在循环的项目的索引并显示它。

我们可以使用 enumerate() 在项目中循环使用索引。

前面的例子:

groceries = ["bananas","butter","cheese","toothpaste"]

for grocery in groceries:
    print(grocery)

现在可以被写成这样:

groceries = ["bananas","butter","cheese","toothpaste"]

for index, grocery in enumerate(groceries):
    print(index,grocery)   

输出:

0 bananas
1 butter
2 cheese
3 toothpaste

或者一个更复杂的输出:

groceries = ["bananas","butter","cheese","toothpaste"]
for index, grocery in enumerate(groceries):
    print(f"Grocery: {grocery} is at index: {index}.") 

输出:

Grocery: bananas is at index: 0.
Grocery: butter is at index: 1.
Grocery: cheese is at index: 2.
Grocery: toothpaste is at index: 3
  • 我们不再像之前那样只写一个变量 grocery,而是写两个:index,grocery。在每次迭代中,index 包含值的索引,grocery 包含 groceries 的值。
  • index 是被迭代的值的索引。
  • Python 中的索引从 0 开始计数。
  • grocery 是当前迭代中的项目的值
  • enumerate(groceries) 这一行让我们在序列中迭代,并跟踪值的索引和值本身。

总结

我希望你喜欢这个关于 Python 中 for 循环的基本介绍。

我们讨论了组成 for 循环的基本语法以及它是如何运行的。

然后我们简要地解释了两个内置的 Python 方法,range()enumerate(),在 for 循环中的作用。

感谢阅读,happy coding!