原文: 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;
,这个条件被评估为true
或false
。如果它是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
,随着每次连续的迭代,它的值被设置为列表中的每个值。本质上,它是一个具有临时值的临时变量。
我们可以随心所欲地命名它,比如 g
或 item
。但是这个名字应该是唯一的,不能与我们程序中的任何其他变量相同。
在第一次运行时,第一个元素--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!