什么是嵌套循环
前面学的循环是「走一条线」,但现实里很多数据是一个面:棋盘、表格、九九乘法表,都有行有列。要处理这种二维结构,就在循环里再套一个循环,这就是嵌套循环。
用钟表理解最清楚:时针走一格,分针要走一整圈(60 格);时针再走一格,分针又走一整圈。外面的「时针」是外层循环,里面的「分针」是内层循环。
外层管行,内层管列
打印一个 3×3 网格,思路是把它拆成「3 行,每行 3 格」:外层循环管「第几行」,内层循环管「这一行里的第几格」。
for i in range(3): # 外层:第几行
for j in range(3): # 内层:这行第几格
print("★", end="") # 不换行,打印一格
print() # 一行结束,换行外层每转一次,内层 range(3) 都完整跑一遍,把一整行填满;末尾的 print() 缩进对齐内层 for(属于外层),所以每打完一行就换行。
内层范围能用外层变量
嵌套循环的灵活之处:内层的范围可以引用外层的变量。九九乘法表就靠这个排成阶梯:
for i in range(1, 4): # 1, 2, 3
for j in range(1, i + 1): # 1 到 i
print(f"{j}x{i}={i*j}", end=" ")
print()
# 第 1 行 1 个算式、第 2 行 2 个、第 3 行 3 个内层 range(1, i + 1) 让每行的算式个数跟着行号 i 变,于是排出三角形。
次数是相乘的,小心别套太多
嵌套循环里,最内层的代码执行次数 = 外层次数 × 内层次数。外层 3、内层 3,就是 3 × 3 = 9 次。这意味着层数越多、循环次数成倍增长:处理大数据时套太多层会很慢,要留心。
最常踩的三个坑
- 内层 for 没缩进:和外层平级就不是嵌套了,两个循环各跑各的。
- 内外层用同一个变量名:都叫 i 会互相覆盖,结果全乱,外层用 i、内层用 j。
- 换行 print() 放错位置:要缩进对齐内层 for(属于外层),放进内层里换行时机就错了。
判断谁套在谁里面、谁每行结束才执行,全看缩进层次。