在 Python 中,循环嵌套是指在一个循环体内再包含另一个完整的循环结构。这种结构常用于处理多维数据、矩阵操作、网格遍历或需要分层重复的场景。以下是详细说明和示例:
一、基本语法
for 外部循环变量 in 外部序列:
# 外部循环代码块
for 内部循环变量 in 内部序列:
# 内部循环代码块
或
while 外部条件:
# 外部循环代码块
while 内部条件:
# 内部循环代码块
二、常见应用场景
1. 打印乘法表
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}x{i}={i*j}", end="\t")
print() # 换行
输出:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
...
2. 遍历二维列表(矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=" ")
print()
输出:
1 2 3
4 5 6
7 8 9
3. 生成组合(如密码破解)
chars = ['a', 'b', 'c']
nums = [1, 2, 3]
for char in chars:
for num in nums:
print(f"{char}{num}")
输出:
a1
a2
a3
b1
b2
b3
...
三、控制流程技巧
1. 提前终止循环
break
: 立即退出当前层循环continue
: 跳过当前迭代,进入下一次循环
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
break # 仅跳出内层循环
print(f"({i},{j})")
输出:
(0,0)
(0,1)
(0,2)
(1,0)
(2,0)
(2,1)
(2,2)
2. 修改循环变量(谨慎使用)
i = 0
while i < 3:
j = 0
while j < 3:
print(f"({i},{j})")
j += 1
if j == 2:
i += 1 # 修改外层循环变量
i += 1
四、性能注意事项
- 时间复杂度:嵌套循环的时间复杂度通常为 O(n²) 或更高,需谨慎处理大数据量
- 优化建议:
- 尽量减少内层循环的计算量
- 使用生成器表达式替代部分嵌套循环
- 考虑使用
itertools.product
简化组合生成
五、经典练习题
- 打印直角三角形星号图案:
* ** *** ****
- 找出二维列表中的最大值
- 实现简单的井字棋游戏板遍历
通过合理使用循环嵌套,可以高效解决许多需要分层处理的编程问题。实际开发中需注意代码可读性,避免过度嵌套(建议不超过3层)。
六、经典实例——使用了嵌套循环输出2~100之间的素数
以下是使用嵌套循环输出2~100之间素数的Python代码:
for num in range(2, 101): # 外层循环遍历2~100的所有数
is_prime = True # 假设当前数是素数
for i in range(2, num): # 内层循环检查2到num-1之间的所有数
if num % i == 0: # 发现能整除的数
is_prime = False # 标记为非素数
break # 提前退出内层循环
if is_prime: # 如果保持素数标记
print(num) # 输出素数
代码解释:
- 外层循环:遍历2到100之间的每个数字
num
- 初始化标记:每次循环开始时假设
num
是素数(is_prime = True
) - 内层循环:检查2到
num-1
之间的所有数字:- 如果发现任何数字能整除
num
,立即将is_prime
设为False
并终止内层循环
- 如果发现任何数字能整除
- 输出结果:如果经过内层循环验证后
is_prime
仍为True
,则输出该素数
优化建议(可选):
虽然题目未要求优化,但可以改进内层循环范围以提高效率:
for num in range(2, 101):
is_prime = True
# 优化:只需检查到平方根即可(取整后+1保证覆盖)
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num)
输出结果:
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
这个程序通过嵌套循环结构,外层控制待检测数字,内层进行素数验证,最终输出2~100之间的所有素数。