本文目录导读:

我来给你详细讲解Python多层循环的各种案例和技巧。
1️⃣ 基础多层循环结构
双重循环基础
# 2x3的矩阵遍历
for i in range(2): # 外层:行
for j in range(3): # 内层:列
print(f"({i},{j})", end=" ")
print() # 换行
# 输出:(0,0) (0,1) (0,2)
# (1,0) (1,1) (1,2)
三重循环示例
# 三维坐标遍历
for x in range(2):
for y in range(2):
for z in range(2):
print(f"({x},{y},{z})", end=" ")
print()
print("---")
2️⃣ 实用案例
案例1:乘法表(双重循环)
# 打印99乘法表
for i in range(1, 10):
for j in range(1, i + 1): # 内层循环范围随外层变化
print(f"{j}×{i}={i*j:2d}", end=" ")
print()
案例2:打印菱形(多重循环控制)
def print_diamond(n):
# 上半部分
for i in range(n):
# 打印空格
for j in range(n - i - 1):
print(" ", end="")
# 打印星号
for k in range(2 * i + 1):
print("*", end="")
print()
# 下半部分
for i in range(n - 2, -1, -1):
for j in range(n - i - 1):
print(" ", end="")
for k in range(2 * i + 1):
print("*", end="")
print()
print_diamond(5)
案例3:矩阵转置(双重循环)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
rows = len(matrix)
cols = len(matrix[0])
# 转置矩阵
transposed = []
for i in range(cols): # 外层遍历列
row = []
for j in range(rows): # 内层遍历行
row.append(matrix[j][i])
transposed.append(row)
print("原矩阵:", matrix)
print("转置后:", transposed)
3️⃣ 高级技巧
列表推导式中的多层循环
# 双重循环的列表推导式 pairs = [(x, y) for x in range(3) for y in range(3)] print(pairs) # 带条件的双重循环 matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)] print(matrix) # 三维列表 cube = [[[i*j*k for k in range(2)] for j in range(2)] for i in range(2)] print(cube)
使用itertools.product
from itertools import product
# 等价于三层嵌套循环
for x, y, z in product(range(2), range(3), range(2)):
print(f"({x},{y},{z})", end=" ")
4️⃣ 实际应用场景
场景1:学生成绩统计
# 多个班级、多个学生的成绩统计
classes = ["A班", "B班", "C班"]
students = ["小明", "小红", "小华"]
scores = [
[[85, 90, 78], [92, 88, 95], [76, 82, 89]], # A班
[[79, 85, 92], [88, 90, 86], [91, 87, 93]], # B班
[[95, 88, 82], [77, 83, 90], [84, 86, 91]] # C班
]
for i, class_name in enumerate(classes):
print(f"\n=== {class_name} ===")
for j, student in enumerate(students):
total = sum(scores[i][j])
avg = total / len(scores[i][j])
print(f"{student}: 总分={total}, 平均分={avg:.1f}")
场景2:图像处理(像素遍历)
import numpy as np
# 模拟一个5x5的灰度图像
image = np.random.randint(0, 256, (5, 5))
# 应用3x3均值滤波器
def apply_filter(img, kernel_size=3):
height, width = img.shape
pad = kernel_size // 2
result = np.zeros_like(img)
for i in range(pad, height - pad):
for j in range(pad, width - pad):
# 3层循环:遍历邻域
total = 0
count = 0
for ki in range(-pad, pad + 1):
for kj in range(-pad, pad + 1):
total += img[i + ki][j + kj]
count += 1
result[i][j] = total // count
return result
print("原图:\n", image)
filtered = apply_filter(image)
print("滤波后:\n", filtered)
场景3:递归替代多层循环(N皇后问题)
def solve_n_queens(n):
def is_safe(board, row, col):
# 检查列
for i in range(row):
if board[i] == col:
return False
# 检查对角线
if abs(board[i] - col) == abs(i - row):
return False
return True
def backtrack(board, row):
if row == n:
solutions.append(board[:])
return
for col in range(n): # 这一层相当于内层循环
if is_safe(board, row, col):
board[row] = col
backtrack(board, row + 1)
solutions = []
backtrack([-1] * n, 0)
return solutions
# 4皇后问题
solutions = solve_n_queens(4)
for sol in solutions:
print(sol)
5️⃣ 性能优化技巧
循环展开和优化
import time
# 不好的方式:频繁计算
def bad_loop(n):
result = 0
for i in range(n):
for j in range(n):
result += i * j # 每次计算i*j
# 好的方式:提前计算
def good_loop(n):
result = 0
for i in range(n):
i_times = i # 提前计算
for j in range(n):
result += i_times * j
# 使用局部变量加速
def fast_loop(n):
result = 0
local_range = range # 局部变量引用
for i in local_range(n):
for j in local_range(n):
result += i * j
# 测试性能
n = 500
start = time.time()
bad_loop(n)
print(f"坏方法: {time.time() - start:.3f}s")
start = time.time()
good_loop(n)
print(f"好方法: {time.time() - start:.3f}s")
使用break和continue控制流程
# 提前跳出多层循环
found = False
for i in range(10):
for j in range(10):
if i * j == 42:
print(f"找到{i}×{j}=42")
found = True
break
if found:
break
# 或者使用else子句
for i in range(10):
for j in range(10):
if i * j == 42:
print(f"找到{i}×{j}=42")
break
else:
continue # 内层未找到,继续外层
break # 内层找到,跳出外层
多层循环的关键点:
- 清晰的结构:保持缩进规范,添加注释
- 合理使用range:注意内外层循环的范围关系
- 性能优化:减少不必要的计算,使用局部变量
- 控制流程:善用break、continue、else
- 替代方案:考虑列表推导式、递归或itertools
多层循环虽然强大,但超过3层就要考虑是否可以用其他方式实现,避免代码可读性太差。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播