Python Loop详解!

简介: 本文详细介绍了Python中的两种循环结构:for循环和while循环。while循环在条件为真时重复执行代码块,for循环则用于遍历序列如列表、元组、字符串和字典。文章通过多个示例展示了循环的基本用法及特点,包括嵌套循环、循环控制语句(如continue、break和pass)及else子句的使用。此外,还探讨了如何优化循环性能,例如使用列表推导式和内置函数。掌握循环是高效Python编程的基础。

嗨,你好啊,我是猿java

在 Python 编程语言中,提供了两种类型的循环——For 循环和 While 循环来处理循环需求以及三种执行循环的方法。虽然所有方法提供了类似的基本功能,但它们在语法和条件检查时间上有所不同。在本文中,我们将了解 Python 循环,并通过示例来理解它们的工作原理。

While循环

在 Python 中,while 循环用于重复执行一组语句,直到给定的条件满足为止,当条件变为假时,程序立即执行循环后的行。

While 循环语法:

while 表达式:
    语句()

所有在编程结构后面缩进相同数量字符的语句被视为单个代码块的一部分。Python 使用缩进作为分组语句的方法。

让我们看看一个简单的 while 循环示例:使用 ‘while’ 循环通过将名为 ‘count’ 的变量从 1 增加到 3 来打印三次“Hello Python”。

count = 0
while count < 3:
    count = count + 1
    print("Hello Python")

输出

Hello Python
Hello Python
Hello Python

在 Python 中使用 else 语句与 While 循环,else 子句仅在 while 条件变为假时执行。如果你中断了循环,或者引发了异常,则不会执行 else 子句。

While 循环与 else 语句的语法:

while 条件:
    # 执行这些语句
else:
    # 执行这些语句

下面是一个带有 else 语句的 while 循环示例:使用 ‘while’ 循环打印三次“Hello Python”,然后在循环结束后打印“In Else Block”,因为有一个与 ‘while’ 循环关联的“else”块。

count = 0
while count < 3:
    count = count + 1
    print("Hello Python")
else:
    print("In Else Block")

输出

Hello Python
Hello Python
Hello Python
In Else Block

For 循环

For 循环用于顺序遍历。例如:遍历列表、字符串或数组等。在 Python 中,有一个“for in”循环,类似于其他语言中的 foreach 循环。让我们通过示例学习如何在 Python 中使用 for 循环进行顺序遍历。

For 循环语法

for 迭代变量 in 序列:
    语句

它可以用于遍历范围和迭代器。

示例: 使用一个 Python for 循环遍历从 0 到 3(不包括 4)的值,如 range(0, n) 结构所指定。它将在循环的每次迭代中打印 ‘i’ 的值。

n = 4
for i in range(0, n):
    print(i)

输出

0
1
2
3

我们可以使用 for 循环遍历 Python 中的列表、元组、字符串和字典。以下代码展示了在 Python 中通过各种数据结构进行迭代的不同方法。它演示了对列表、元组、字符串、字典和集合的迭代,打印它们的元素或键值对。

print("List Iteration")
l = ["hello", "python", "loop"]
for i in l:
    print(i)

print("\nTuple Iteration")
t = ("hello", "python", "loop")
for i in t:
    print(i)

print("\nString Iteration")
s = "Hello"
for i in s:
    print(i)

print("\nDictionary Iteration")
d = dict()
d['xyz'] = 123
d['abc'] = 345
for i in d:
    print("%s  %d" % (i, d[i]))

print("\nSet Iteration")
set1 = {
   1, 2, 3, 4, 5, 6}
for i in set1:
    print(i),

输出

List Iteration
hello
python
loop

Tuple Iteration
hello
python
loop

String Iteration
H
e
l
l
o

Dictionary Iteration
xyz  123
abc  345

Set Iteration
1
2
3
4
5
6

通过序列索引进行迭代

我们还可以使用序列中元素的索引进行迭代。关键思想是先计算列表的长度,然后在该长度范围内迭代序列。见下面的示例:

示例:该代码使用 ‘for’ 循环遍历列表并打印每个元素。它基于每个元素的索引进行迭代,使用 ‘range(len(list))’ 获得索引。结果是它在单独的行上打印列表中的每个项目。

list = ["hello", "python", "loop"]
for index in range(len(list)):
    print(list[index])

输出

hello
python
loop

else 和for 循环结合

我们还可以将 else 语句与 for 循环结合使用,就像在 while 循环中一样。但由于 for 循环中没有条件基于其终止执行,所以 else 块将在 for 块执行完成后立即执行。

在此代码中,‘for’ 循环遍历列表并打印每个元素,就像前面的示例一样。然而,在循环完成后,将执行 “else” 块。因此,在这种情况下,一旦循环完成,它将打印“Inside Else Block”。

list = ["hello", "python", "loop"]
for index in range(len(list)):
    print(list[index])
else:
    print("Inside Else Block")

输出

hello
python
loop
Inside Else Block

Python 中的嵌套循环

Python 编程语言允许在一个循环内使用另一个循环,这称为嵌套循环。以下部分展示了一些示例以说明这一概念。

嵌套循环语法

for 迭代变量 in 序列:
    for 迭代变量 in 序列:
        语句()
    语句()

Python 编程语言中嵌套 while 循环语句的语法如下:

while 表达式:
    while 表达式:
        语句()
    语句()

关于循环嵌套的最后一点是,我们可以在 Python 中将任何类型的循环放在任何其他类型的循环内。例如,for 循环可以在 while 循环内,反之亦然。

示例:此 Python 代码使用嵌套的 ‘for’ 循环创建一个数字的三角形模式。它从 1 到 4 进行迭代,在每次迭代中根据迭代次数多次打印当前数字。结果是一个类似于金字塔的数字模式。

for i in range(1, 5):
    for j in range(i):
        print(i, end=' ')
    print()

输出

1 
2 2 
3 3 3 
4 4 4 4

循环控制语句

循环控制语句改变执行的正常顺序。当执行离开一个作用域时,在该作用域中创建的所有自动对象都会被销毁。Python 支持以下控制语句。

Continue 语句
Python 中的 continue 语句将控制返回到循环的开头。

示例:此 Python 代码遍历字符串 ‘hello’ 的字符。当遇到字符 ‘e’ 或 ‘s’ 时,它使用 continue 语句跳过当前迭代并继续下一个字符。对于所有其他字符,它打印“Current Letter :”后跟字符。因此,输出将显示除 ‘e’ 和 ‘s’ 之外的所有字符,每个字符在单独的行上。

for letter in 'hello':
    if letter == 'e' or letter == 's':
        continue
    print('Current Letter :', letter)

输出

Current Letter : h
Current Letter : e
Current Letter : l
Current Letter : l
Current Letter : o

Break 语句

Python 中的 break 语句将控制带出循环。

示例:在此 Python 代码中,它遍历字符串 ‘hello’ 的字符。当遇到字符 ‘e’ 或 ‘s’ 时,它使用 break 语句退出循环。循环终止后,它打印“Current Letter :”后跟在循环中遇到的最后一个字符(‘e’ 或 ‘s’ 之一)。因此,输出将显示“Current Letter :”后跟字符串中首次出现的 ‘e’ 或 ‘s’。

for letter in 'loop':
    if letter == 'o' or letter == 's':
        break

print('Current Letter :', letter)

输出

Current Letter : o

Pass 语句
我们在 Python 中使用 pass 语句来编写空循环。Pass 也用于空控制语句、函数和类。

示例:此 Python 代码使用 ‘for’ 循环遍历字符串 ‘hello’ 的字符。然而,它在循环中不执行任何特定操作,而是使用 ‘pass’ 语句。在循环之后,它打印“Last Letter :”后跟字符串中的最后一个字符,即 ‘s’。

for letter in 'loop':
    pass
print('Last Letter :', letter)

输出

Last Letter : p

Python 中的 for 循环内部如何工作?

在进入本节之前,你应该对 Python 迭代器有先验了解。

首先,让我们看看一个简单的 Python 中的 for 循环是什么样子。

示例:此 Python 代码遍历一个名为 fruits 的列表,其中包含“apple”、“orange”和“kiwi”。它在单独的行上打印每个水果的名称,按它们在列表中出现的顺序显示。

fruits = ["apple", "orange", "kiwi"]

for fruit in fruits:
    print(fruit)

输出

apple
orange
kiwi

在这里,我们可以看到 Python 中的 for 循环遍历了可迭代对象 fruit,它是一个列表。列表、集合、字典是一些可迭代对象,而整数对象不是可迭代对象。For 循环可以遍历这些可迭代对象中的任何一个。

此 Python 代码使用迭代器手动遍历一个水果列表。它逐个打印每个水果的名称,当列表中没有更多项目时停止。

fruits = ["apple", "orange", "kiwi"]
iter_obj = iter(fruits)
while True:
    try:
        fruit = next(iter_obj)
        print(fruit)
    except StopIteration:
        break

输出

apple
orange
kiwi

我们可以看到,在幕后我们调用了 iter() 和 next() 方法。

我们在本文中介绍了 Python 循环。我们还看到了如何在 Python 中使用 for 循环、while 循环和嵌套循环。本文提供了不同的用例场景和示例来演示循环的工作原理并提供清晰的理解。

常见问题

在 Python 中哪种循环更快?

一般来说,for 循环由于其实现方式往往比 while 循环更快。然而,对于大多数实际用途来说,for 和 while 循环之间的性能差异通常可以忽略不计。选择它们应该基于清晰性和特定任务的适用性,而不是性能问题。

为什么 Python 在循环中会很慢?

与 C 或 C++ 等低级语言相比,Python 在循环中可能被认为很慢。这主要是因为 Python 是一种解释型语言,意味着每行代码在运行时逐行执行。此外,Python 的动态类型和内存管理相比于静态类型的编译语言可能会引入开销。

Python 中使用了多少种循环?

Python 支持几种类型的循环:

  • for 循环:遍历序列(例如列表、元组、字符串、字典)。
  • while 循环:只要指定条件为真,就执行一段代码。
  • 嵌套循环:一个循环内使用另一个循环。
  • 推导式(例如列表推导式、字典推导式):使用循环创建列表、字典等的简洁方法。

如何改进 Python 中的循环?

要优化 Python 中的循环,请考虑以下提示:

  • 使用列表推导式:它们通常比传统的 for 循环创建列表更快。
  • 减少函数调用:如果可能,将函数调用移到循环外部。
  • 使用内置函数:Python 的内置函数(例如 map()、filter()、sum())是优化的,可能比手动编写的循环更快。
  • 分析代码:使用 cProfile 等工具识别瓶颈并进行相应优化。
  • 考虑使用库:如 NumPy 和 pandas 等库提供了针对数组或数据帧的常见任务的优化函数。

在 Python 中 for 循环不好吗?

不,for 循环在 Python 中并不是本质上不好的。它们是迭代的基本构造,在 Python 编程中广泛使用。然而,对于某些涉及大型数据集或性能关键代码的任务,使用列表推导式、向量化操作(在 NumPy 等库中)或减少函数调用等技术优化循环操作可以提高效率。

总结

本文介绍了 Python 中的两种主要循环结构:for 循环和 while 循环,并通过多个示例详细讲解了它们的使用方法和特点。while 循环用于在条件为真时重复执行代码块,而 for 循环用于遍历序列,如列表、元组、字符串和字典。此外,还介绍了嵌套循环和循环控制语句(如 continue、break 和 pass),以及如何在循环中使用 else 语句。最后,讨论了如何优化循环性能,如使用列表推导式和内置函数。总的来说,理解和正确使用循环是高效 Python 编程的关键。

学习交流

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注:猿java,持续输出硬核文章。

目录
相关文章
|
23天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2576 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
162 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
971 14
|
3天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
214 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
733 10