Python 中的 For 循环:初学指南
【摘要】 Python 中的 for 循环是编写灵活且干净的 Python 程序时应该注意的主要结构之一。Python for 循环是一个控制流语句,它允许迭代一个序列(例如一个字符串、列表、元组、字典、集合、字符串)。for 语句为序列中的每个项目执行特定的代码块。这里,我们将介绍许多与 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()
你能看到错误在哪里吗?
我会把它留给你去发现......🙂
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)