Python 中的 For 循环:初学指南
Python 中的 for 循环是编写灵活且干净的 Python 程序时应该注意的主要结构之一。
Python for 循环是一个控制流语句,它允许迭代一个序列(例如一个字符串、列表、元组、字典、集合、字符串)。for 语句为序列中的每个项目执行特定的代码块。
这里,我们将介绍许多与 Python 中的 for 循环相关的概念,这些概念不仅可以让您对循环有基本的了解,还可以更深入地了解它们的工作方式。
让我们开始吧!
在 Python 中使用 For 循环遍历列表
首先,我们将看到如何使用 for 循环来遍历 Python 序列的项目。
for 循环的通用语法是:
for {item} in {sequence}:
{code_block}
在循环的每一次迭代的代码块被使用所执行的内部的for循环项中的序列。一旦序列中没有更多项目,for 循环就会结束。
如果出现特定条件,循环的执行甚至可能在序列结束之前结束,我们将在本教程的后面部分看到这一点……
下面是一个 for 循环的例子:
animals = ['lion', 'tiger', 'giraffe']
for animal in animals:
print(animal)
输出是:
lion
tiger
giraffe
可以使用break和continue语句修改 for 循环的行为。
在 Python For 循环中使用 Break 和 Continue
break 语句停止执行 for 循环并在循环后继续执行代码。
animals = ['lion', 'tiger', 'giraffe']
for animal in animals:
if animal == 'tiger':
break
else:
print(animal)
我们使用if else 语句跳出循环或根据条件打印列表项。
输出如下,因为 for 循环的执行在列表的第二个元素处中断:
lion
在我们前面的例子中,我们也可以省略 else 语句:
for animal in animals:
if animal == 'tiger':
break
print(animal)
continue 语句跳过 for 循环中的当前迭代并从循环的下一次迭代继续执行代码。
让我们在前面的例子中用 continue 替换 break ,看看会发生什么:
for animal in animals:
if animal == 'tiger':
continue
print(animal)
这次我们的代码还打印了列表的第三个元素,因为 continue 语句会跳过第二次迭代,但不会像 break 语句那样退出循环:
lion
giraffe
For 循环应用于元组和集合
Python for 循环实现的强大之处在于它可以应用于任何类型的序列,例如元组或集合。
元组
animals = ('lion', 'tiger', 'giraffe')
for animal in animals:
print(animal)
集合
animals = {'lion', 'tiger', 'giraffe'}
for animal in animals:
print(animal)
您可以看到我们编写 for 循环的方式不会随着列表、元组或集合而改变。
考虑到集合是无序 和无索引的,改变的一件事是将代码应用于集合时的输出。
在继续在您的机器上运行代码以查看 tuple 和 set 之间的区别之前。
For 循环应用于字符串
字符串也是一个序列,它是一个字符序列。
因此,您还可以将 for 循环应用于字符串:
website = 'codefather.tech'
for character in website:
print(character)
这是输出:
c
o
d
e
f
a
t
h
e
r
.
t
e
c
h
打印语句会在字符串的每个字符后自动添加一个换行符。
如果我们想在没有换行符的情况下打印每个字符怎么办?
要在没有换行符的Python 中打印字符串,您可以将 end= 参数传递给 print() 函数。
在这种情况下,我们将删除换行符并在每个字符之间留一个空格:
website = 'codefather.tech'
for character in website:
print(character, end=' ')
这次的输出是:
c o d e f a t h e r . t e c h
现在让我们转向另一种数据类型……
For 循环应用于字典
想知道 for 循环如何与字典一起使用?
让我们一探究竟吧!
user_details = {'name': 'Claudio', 'nationality': 'italian'}
for user_detail in user_details:
print(user_detail)
当你运行它时,你会回来......
name
nationality
...只是字典的键。
所以从这里我们可以打印键和值:
for user_detail in user_details:
print(user_detail, ":", user_details[user_detail])
[output]
name : Claudio
nationality : italian
让我们尝试一些不同的东西:
for key, value in user_details:
print(name, nationality)
嗯……它不起作用……
Traceback (most recent call last):
File "/opt/python/codefather/for_loop.py", line 55, in
for name, nationality in user_details:
ValueError: too many values to unpack (expected 2)
我们得到了太多的值来解包错误。
为了使它工作,我们必须使用字典 items() 方法,这是该方法为我们的字典返回的内容:
print(user_details.items())
dict_items([('name', 'Claudio'), ('nationality', 'italian')])
让我们将它应用于我们的 for 循环以从字典中取回键和值:
for key, value in user_details.items():
print(key, ":", value)
[output]
name : Claudio
nationality : italian
这样就对了.
Python 中的 For Else 循环
如果您编写 Python 程序,则可以将 else 子句与 for 循环一起使用。
如下:
animals = ['lion', 'tiger', 'giraffe']
for animal in animals:
print(animal)
else:
print("For loop executed")
当与 for 循环一起使用时,else 子句中的代码会在 for 循环完成后执行。唯一的例外是 break 语句停止循环的执行。
lion
tiger
giraffe
For loop executed
现在看看当与 for 循环一起使用时,break 语句如何改变 else 子句的行为:
animal_to_find = 'tiger'
for animal in animals:
if animal == animal_to_find:
print(animal_to_find,"found")
break
else:
print("Animal not found")
输出是:
tiger found
当 break 语句停止执行 for 循环时,else 子句中的代码不会被执行。
如果没有执行break语句,我们来确认一下else块是否被执行:
animal_to_find = 'elephant'
for animal in animals:
if animal == animal_to_find:
print(animal_to_find,"found")
break
else:
print("Animal not found")
我们程序的输出证实:
Animal not found
带索引的 For 循环
到目前为止,我们看到的 for 循环与其他编程语言(如 C)中使用的 for 循环非常不同,后者在循环定义中存在索引。
Python 还允许在执行 for 循环时跟踪序列的索引。
一种方法是使用range() 内置函数(准确地说,正如这里所解释的,严格来说并不是一个函数)。
在for 循环中使用range之前,让我们找出 range() 返回什么:
>>> print(range(10))
range(0, 10)
>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(list(range(1,10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(list(range(1,10,2)))
[1, 3, 5, 7, 9]
第一个打印语句并没有告诉我们太多信息,因此要找出 range() 返回的内容,我们可以将其转换为列表。
我们可以看到:
- range(10) 返回 0 到 9 之间的数字(不包括 10)。
- range(1,10) 返回 1 到 9 之间的数字。
- range(1,10,2) 只返回从 1 到 9 的奇数,因为我们传递了第三个参数(step)。
range 函数默认返回一个从 0 开始的数字序列,以 1 为增量,以传递给函数的数字减 1 结束 。可以自定义起始值和增量(步长)。
考虑到 range() 生成一系列数字,我们可以使用它来生成列表(或元组、或集合等)的索引,作为 for 循环的一部分。
为此,我们使用range 函数和 len 函数:
animals = ['lion', 'tiger', 'giraffe']
for index in range(len(animals)):
print(animals[index])
尝试确认输出是您期望的输出。
在 for 循环中跟踪序列索引的另一种方法是使用Python enumerate。
Python 中的嵌套 For 循环
在某些情况下,您可能需要在另一个 for 循环中使用 for 循环。
这就是我们所说的嵌套 for 循环。
为了解释这一点,我们将定义一个矩阵(基本上是一个包含数字的列表列表):
matrix = [[1,2,3],[4,5,6]]
for row in matrix:
for value in row:
if value == 2:
print("Number 2 found in the matrix")
[output]
Number 2 found in the matrix
外循环一次选择一行,内循环遍历每一行中的值。
另一种选择是使用 range() 函数来跟踪矩阵的行和列:
for row in range(len(matrix)):
for column in range(len(matrix[row])):
print("Row:",row,"Column:",column,"Value:",matrix[row][column])
在这种情况下,我们跟踪行和列的索引,因此我们可以打印它们:
Row: 0 Column: 0 Value: 1
Row: 0 Column: 1 Value: 2
Row: 0 Column: 2 Value: 3
Row: 1 Column: 0 Value: 4
Row: 1 Column: 1 Value: 5
Row: 1 Column: 2 Value: 6
在嵌套循环中使用索引时要小心,实际上很容易错误地使用无效索引,如下例所示。这些错误并不总是很容易找到:
for row in range(len(matrix)):
for column in range(len(row)):
print("Row:",row,"Column:",column,"Value:",matrix[row][column])
此代码返回以下错误:
Traceback (most recent call last):
File "/opt/python/codefather/for_loop.py", line 103, in
for column in range(len(row)):
TypeError: object of type 'int' has no len()
你能看到错误在哪里吗?
我会把它留给你去发现......🙂
- 点赞
- 收藏
- 关注作者
评论(0)