1. 嵌套 for 循环的本质理解
嵌套 for 循环是编程中最基础却最容易被低估的概念之一。很多人以为它只是简单的"循环套循环",但实际上它代表了计算机处理多维数据的核心思维方式。想象你正在整理一个图书馆:外层循环相当于逐个书架查看,内层循环则是检查当前书架上的每一本书。这种"分层处理"的思维模式,在编程中无处不在。
1.1 执行机制深度解析
当 Python 解释器遇到嵌套循环时,它的处理顺序是这样的:
- 进入外层循环,初始化循环变量(如 i=0)
- 执行外层循环体中的第一条语句 - 这里遇到了内层循环
- 完整执行内层循环的所有迭代
- 回到外层循环,执行下一条语句(如果有的话)
- 外层循环变量更新(如 i=1),重复上述过程
这个过程中有个关键特性:内层循环的每次迭代都是"重新开始"的。也就是说,内层循环会在每次外层循环迭代时,都从头开始执行完整的循环过程。这个特性在打印九九乘法表时表现得尤为明显 - 内层循环的范围是动态变化的(range(1, i+1))。
1.2 时间复杂度分析
嵌套循环的时间复杂度是各层循环迭代次数的乘积。例如:
- 外层循环 n 次,内层循环 m 次 → O(n×m)
- 如果三层嵌套,分别是 n/m/k 次 → O(n×m×k)
在实际项目中,我们需要特别注意嵌套层数对性能的影响。我曾经处理过一个数据分析任务,最初用四层嵌套循环处理,运行需要 2 小时;优化为两层后,仅需 3 分钟。这就是为什么在总结中特别强调"嵌套层数不宜过多"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础案例:打印矩形的扩展思考
2.1 空心矩形的实现
打印实心矩形是最基础的练习,但实际面试中经常会被要求打印空心矩形。这需要我们在内层循环中加入条件判断:
python复制# 打印5行7列的空心矩形
rows, cols = 5, 7
for i in range(rows):
for j in range(cols):
if i == 0 or i == rows-1 or j == 0 or j == cols-1:
print("*", end="")
else:
print(" ", end="")
print()
这个案例教会我们:嵌套循环中结合条件判断,可以实现更复杂的逻辑。关键在于找出边界条件(第一行/最后一行/第一列/最后一列)。
2.2 动态大小的矩形
实际项目中,我们很少处理固定大小的图形。更实用的做法是通过参数控制图形大小:
python复制def print_rectangle(rows, cols, char="*"):
"""打印指定行列数的矩形"""
for i in range(rows):
for j in range(cols):
print(char, end="")
print()
# 使用示例
print_rectangle(4, 6)
