Python 3 循环详解:for 循环、while 循环与实战技巧
循环是编程中用于 “重复执行一段代码” 的核心语法,Python 3 提供两种主流循环结构:for 循环(适合 “已知循环次数或遍历序列” 场景)和 while 循环(适合 “未知循环次数,依赖条件判断” 场景)。本文从 “基础语法→进阶用法→循环控制→实战案例” 四个维度,系统讲解 Python 3 循环的使用方法,帮你高效处理重复逻辑。
for 循环:遍历序列或可迭代对象
for 循环的核心是 “遍历”—— 按顺序获取可迭代对象(如列表、字符串、字典)中的每个元素,执行对应代码块,直到所有元素处理完毕。
1. 基础语法
1 | for 变量名 in 可迭代对象: |
关键概念:
- 可迭代对象:能被for循环遍历的对象,常见类型包括:
- 序列:列表(
list)、字符串(str)、元组(tuple); - 集合:集合(
set)、字典(dict,默认遍历键); - 其他:
range对象(生成整数序列)、文件对象等。
- 序列:列表(
- 缩进:循环体内的代码必须缩进(推荐 4 个空格),缩进不一致会报
IndentationError。
2. 常见遍历场景
场景 1:遍历列表(list)
1 | # 定义列表:存储学生姓名 |
运行结果:
1 | 当前学生:张三 |
场景 2:遍历字符串(str)
字符串是 “字符序列”,for 循环会逐个获取每个字符:
1 | # 定义字符串 |
运行结果:
1 | 字符:P |
场景 3:遍历字典(dict)
字典默认遍历 “键(key)”,若需遍历 “值(value)” 或 “键值对(key-value)”,需使用 values() 或 items() 方法:
1 | # 定义字典:存储学生成绩 |
运行结果:
1 | === 遍历键 === |
场景 4:遍历 range 对象(生成整数序列)
range() 是 Python 内置函数,用于生成 “不可变的整数序列”,常配合 for 循环实现 “固定次数的循环”。其语法:
range(stop):生成0 ~ stop-1的整数(如range(3)→0,1,2);range(start, stop):生成start ~ stop-1的整数(如range(1,4)→1,2,3);range(start, stop, step):生成start ~ stop-1的整数,步长为step(如range(1,6,2)→1,3,5)。
示例:循环 5 次,打印计数:
1 | # 生成 1~5 的整数序列(range(1,6)) |
运行结果:
1 | 第 1 次循环 |
while 循环:基于条件的重复执行
while 循环的核心是 “条件判断”—— 只要条件表达式结果为 True,就重复执行代码块;当条件变为 False 时,循环终止。适合 “未知循环次数,需通过条件控制” 的场景(如 “直到用户输入正确密码才停止循环”)。
1. 基础语法
1 | # 1. 初始化条件变量(可选,若条件依赖变量) |
关键注意:
- 避免无限循环:必须在循环体内更新 “条件变量”(如
i += 1),否则条件会一直为True,导致循环永不终止(需按Ctrl+C强制停止); - 条件表达式:结果必须是布尔值(
True/False),非布尔值会自动转换(如0→False,非0数字→True)。
2. 常见使用场景
场景 1:固定次数循环(模拟 for 循环)
1 | # 初始化计数器:从 1 开始 |
运行结果:
1 | 第 1 次循环 |
场景 2:直到用户输入正确才停止
1 | # 预设正确密码 |
运行结果:
1 | 请输入密码:123456 |
场景 3:处理未知长度的数据(如读取文件)
1 | # 模拟从文件读取数据(每次读取一行,直到无数据) |
运行结果:
1 | 读取到:第一行数据 |
循环控制:break、continue、else
Python 提供 break、continue 关键字控制循环流程,以及 else 子句处理 “循环正常结束” 的场景,灵活应对复杂逻辑。
1. break:终止整个循环
break 用于 “立即终止当前循环”,无论循环条件是否满足,直接跳出循环,执行循环后的代码。
示例:遍历列表,找到目标元素后终止循环:
1 | # 定义列表:存储数字 |
运行结果:
1 | 当前元素:10(不是目标) |
2. continue:跳过当前迭代,进入下一次
continue 用于 “跳过当前迭代的剩余代码”,直接进入下一次循环(不会终止整个循环)。
示例:遍历 1~5,跳过偶数,打印奇数:
1 | # 遍历 1~5 |
运行结果:
1 | 奇数:1 |
3. else 子句:循环正常结束时执行
for/while 循环可搭配 else 子句,仅当循环 “正常结束”(未被 break 终止)时,才执行 else 中的代码。
场景:判断列表中是否存在目标元素
1 | # 定义列表 |
运行结果:
1 | 未找到目标水果:葡萄 |
嵌套循环:循环内部嵌套循环
当需要 “在一个循环中执行另一个循环” 时(如 “遍历矩阵的每行每列”“打印九九乘法表”),使用嵌套循环—— 外层循环控制 “大的重复单元”,内层循环控制 “小的重复单元”。
1. 基础语法(以 for 嵌套 for 为例)
1 | for 外层变量 in 外层可迭代对象: |
关键注意:
- 内层循环的缩进比外层多 4 个空格,确保层级清晰;
- 外层循环执行 1 次,内层循环执行 “完整的所有次”(如外层循环 3 次,内层循环 2 次,总执行次数为 3×2=6 次)。
2. 实战示例:打印九九乘法表
1 | # 外层循环:控制行数(1~9) |
运行结果:
1 | 1×1=1 |
循环的性能与优化
在处理大量数据时,循环的效率至关重要,以下是常见优化技巧:
1. 优先使用内置函数 / 推导式(替代手动循环)
Python 内置函数(如 map()、filter())和推导式(列表推导式、字典推导式)是用 C 语言实现的,效率远高于手动 for 循环。
示例:生成 1~10 的平方列表
低效:手动for循环
1
2
3
4squares = []
for i in range(1, 11):
squares.append(i ** 2)
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]高效:列表推导式
1
2squares = [i ** 2 for i in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. 减少循环内部的计算量
将循环外不变的计算(如函数调用、常量定义)移到循环外,避免重复计算:
1 | import math |
3. 避免在循环中修改可迭代对象
遍历列表时,若直接修改列表(如 append()、remove()),会导致索引混乱,引发错误或逻辑异常。如需修改,建议遍历列表的副本:
1 | # 错误示例:遍历中删除元素,导致漏删 |
for 循环 vs while 循环:如何选择?
| 对比维度 | for 循环 | while 循环 |
|---|---|---|
| 核心场景 | 已知循环次数、遍历可迭代对象(列表、字符串等) | 未知循环次数、依赖条件判断(如 “直到输入正确”) |
| 循环控制 | 自动遍历,无需手动控制索引 | 需手动初始化 / 更新条件变量(避免无限循环 |
v1.3.10