跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python for 循环详解与实战案例

综述由AI生成系统讲解 Python for 循环的基本语法、常用场景及控制结构,涵盖列表、字典、range 等遍历方式。通过杨辉三角打印和数独求解器两个综合案例,展示了嵌套循环、回溯算法在实际编程中的应用,帮助读者深入理解循环逻辑与数据结构处理。

芝士奶盖发布于 2026/3/29更新于 2026/5/2833 浏览

Python for 循环详解

for 循环是 Python 中最核心的迭代结构,它能够遍历任何可迭代对象(如列表、元组、字符串、字典、集合、文件对象等),并对每个元素执行指定的操作。与其他语言(如 C 的 for (i=0; i<n; i++))不同,Python 的 for 更接近'foreach'风格,专注于遍历序列或集合中的元素,语法简洁且功能强大。

本文将系统讲解 for 循环的基本语法、常用场景,并通过杨辉三角打印和数独求解器两个综合案例,展示 for 循环在实际编程中的灵活应用。

1. 基本语法与常用场景

1.1 语法结构
for 变量 in 可迭代对象:
    # 循环体
else:
    # 可选,当循环正常结束(没有被 break 中断)时执行
  • 变量:每次迭代从可迭代对象中取出一个元素赋值给该变量。
  • 可迭代对象:包括列表、元组、字符串、字典、集合、range 对象、文件对象、生成器等。
  • 循环体:需要重复执行的代码块,注意缩进。
  • else 子句:可选,当循环未被 break 终止时执行。
1.2 常用遍历场景
遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(f"我喜欢吃 {fruit}")
# 输出:
# 我喜欢吃 苹果
# 我喜欢吃 香蕉
# 我喜欢吃 橙子
遍历元组
coordinates = (10, 20, 30)
for coord in coordinates:
    print(f"坐标值:{coord}")
遍历字符串(字符序列)
message = "Python"
for char in message:
    print(char, end="-")
# 输出:P-y-t-h-o-n-
遍历字典
person = {"name": "张三", "age": 30, "city": "北京"}
# 遍历键(默认)
for key in person:
    print(key)
# 输出:name age city
# 遍历值
for value in person.values():
    print(value)
# 输出:张三 30 北京
# 同时遍历键和值
for key, value in person.items():
    print(f"{key}: {value}")
使用 range() 生成数字序列
# 生成 0 到 4
for i in range(5):
    print(i, end=" ")
# 输出:0 1 2 3 4
# 生成 2 到 8,步长为 2
for i in range(2, 9, 2):
    print(i, end=" ")
# 输出:2 4 6 8
# 使用索引遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for i in range(len(fruits)):
    print(f"索引 {i}: {fruits[i]}")
使用 enumerate() 同时获取索引和元素
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
    print(f"索引 {index}: {fruit}")
使用 zip() 并行遍历多个可迭代对象
names = ["张三", "李四", "王五"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
    print(f"{name} 的分数是 {score}")
循环控制:break 和 continue
# 查找第一个偶数
numbers = [1, 3, 5, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"找到偶数:{num}")
        break  # 立即退出循环
# 跳过偶数,打印奇数
for num in numbers:
    if num % 2 == 0:
        continue  # 跳过本次循环剩余部分
    print(num)
for...else 结构
# 检查列表中是否有偶数
numbers = [1, 3, 5, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print("发现偶数!")
        break
else:
    print("没有偶数。")  # 因为循环未被 break,所以执行
列表推导式(简洁的 for 循环)
# 生成 0~9 的平方列表
squares = [x**2 for x in range(10)]
print(squares)
# 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件的推导式(只保留偶数)
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
# 输出:[0, 4, 16, 36, 64]
遍历文件对象
with open("example.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line, end="")  # 逐行打印

2. 案例一:打印杨辉三角(数字金字塔)

杨辉三角(Pascal's Triangle)是一个经典的数学图形,每一行由组合数构成,满足:

  • 第 n 行有 n+1 个数字(行号从 0 开始)。
  • 首尾数字为 1。
  • 内部数字等于上一行相邻两数之和:triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]。
2.1 使用组合数公式(math.comb)
import math

def print_pascal_comb(n):
    """打印 n 行的杨辉三角,使用组合数公式"""
    for row in range(n):
        # 打印前导空格,使三角形居中
        print(" " * (n - row - 1) * 3, end="")
        # 每个数字占 3 位,乘 3 对齐
        for col in range(row + 1):
            num = math.comb(row, col)
            print(f"{num:3}", end=" ")
        print()

print_pascal_comb(6)

输出:

  1
  1 1
 1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

for 循环点睛:

  • 外层 for row 控制行数。
  • 内层 for col 遍历每一行的元素,用组合数计算值。
  • 前导空格数量随行数递减,实现居中效果。
2.2 使用迭代生成(递推关系)
def print_pascal_iter(rows):
    """打印 rows 行的杨辉三角,使用迭代生成"""
    triangle = []  # 存储整个三角形
    for i in range(rows):
        row = [1] * (i + 1)  # 初始化为全 1,首尾已正确
        for j in range(1, i):
            # 从第 2 个到倒数第 2 个
            row[j] = triangle[i-1][j-1] + triangle[i-1][j]
        triangle.append(row)
    
    # 打印三角形
    max_width = len(str(max(triangle[-1])))  # 最大数字宽度
    for i, row in enumerate(triangle):
        print(" " * (rows - i - 1) * (max_width + 1), end="")
        for num in row:
            print(f"{num:{max_width}d}", end=" ")
        print()

print_pascal_iter(8)

输出:

         1
       1 1
     1 2 1
   1 3 3 1
 1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1

for 循环点睛:

  • 外层 for i 逐行构建。
  • 内层 for j 根据上一行计算当前行中间值。
  • 打印部分再次使用嵌套 for 控制对齐。

3. 案例二:数独求解器(回溯算法)

数独是 9×9 的网格,每行、每列和每个 3×3 宫(共 9 个)必须包含 1-9 各一次。我们将用 for 循环实现回溯法求解。

3.1 数独的表示

空白格用 0 表示,示例数独:

5 3 . | . 7 . | . . .
6 . . | 1 9 5 | . . .
. 9 8 | . . . | . 6 .
------+-------+------
8 . . | . 6 . | . . 3
4 . . | 8 . 3 | . . 1
7 . . | . 2 . | . . 6
------+-------+------
. 6 . | . . . | 2 8 .
. . . | 4 1 9 | . . 5
. . . | . 8 . | . 7 9
3.2 合法性检查函数
def is_valid(board, row, col, num):
    """检查在 (row, col) 处填入 num 是否合法"""
    # 检查行
    for j in range(9):
        if board[row][j] == num:
            return False
    # 检查列
    for i in range(9):
        if board[i][col] == num:
            return False
    # 检查所在 3x3 宫
    start_row, start_col = 3 * (row // 3), 3 * (col // 3)
    for i in range(start_row, start_row + 3):
        for j in range(start_col, start_col + 3):
            if board[i][j] == num:
                return False
    return True

for 循环点睛:

  • 三个独立的 for 循环分别扫描行、列、宫。
  • 宫内使用双重 for 遍历 3×3 区域。
3.3 回溯求解函数
def solve_sudoku(board):
    """使用回溯法求解数独(修改原 board),返回是否找到解"""
    for i in range(9):
        for j in range(9):
            if board[i][j] == 0:  # 找到空白格
                for num in range(1, 10):  # 尝试 1-9
                    if is_valid(board, i, j, num):
                        board[i][j] = num
                        if solve_sudoku(board):  # 递归求解剩余部分
                            return True
                        board[i][j] = 0  # 回溯
    return False  # 无解,回溯

return True  # 无空白格,求解完成

for 循环点睛:

  • 双重 for 遍历整个棋盘,定位空白格。
  • 内层 for num 枚举所有候选数字,依次尝试。
  • 递归调用自身继续求解,利用 for 循环实现深度优先搜索。
3.4 打印函数
def print_sudoku(board):
    """美观打印数独棋盘"""
    for i in range(9):
        if i % 3 == 0 and i != 0:
            print("-" * 21)  # 每三行打印横线
        for j in range(9):
            if j % 3 == 0 and j != 0:
                print("|", end=" ")  # 每三列打印竖线
            print(board[i][j] if board[i][j] != 0 else ".", end=" ")
        print()

for 循环点睛:

  • 外层 for i 控制行,内层 for j 控制列。
  • 利用 % 运算符在适当位置添加分隔符,使棋盘清晰。
3.5 完整测试
# 定义数独(同上)
sudoku = [
    [5, 3, 0, 0, 7, 0, 0, 0, 0],
    [6, 0, 0, 1, 9, 5, 0, 0, 0],
    [0, 9, 8, 0, 0, 0, 0, 6, 0],
    [8, 0, 0, 0, 6, 0, 0, 0, 3],
    [4, 0, 0, 8, 0, 3, 0, 0, 1],
    [7, 0, 0, 0, 2, 0, 0, 0, 6],
    [0, 6, 0, 0, 0, 0, 2, 8, 0],
    [0, 0, 0, 4, 1, 9, 0, 0, 5],
    [0, 0, 0, 0, 8, 0, 0, 7, 9]
]

print("原始数独:")
print_sudoku(sudoku)
if solve_sudoku(sudoku):
    print("\n解出的数独:")
    print_sudoku(sudoku)
else:
    print("无解")

输出(节选):

原始数独:
5 3 . | . 7 . | . . .
6 . . | 1 9 5 | . . .
. 9 8 | . . . | . 6 .
------+-------+------
8 . . | . 6 . | . . 3
4 . . | 8 . 3 | . . 1
7 . . | . 2 . | . . 6
------+-------+------
. 6 . | . . . | 2 8 .
. . . | 4 1 9 | . . 5
. . . | . 8 . | . 7 9

解出的数独:
5 3 4 | 6 7 8 | 9 1 2
6 7 2 | 1 9 5 | 3 4 8
1 9 8 | 3 4 2 | 5 6 7
------+-------+------
8 5 9 | 7 6 1 | 4 2 3
4 2 6 | 8 5 3 | 7 9 1
7 1 3 | 9 2 4 | 8 5 6
------+-------+------
9 6 1 | 5 3 7 | 2 8 4
2 8 7 | 4 1 9 | 6 3 5
3 4 5 | 2 8 6 | 1 7 9

4. 总结

通过上述案例,我们可以看到 for 循环在 Python 编程中的核心地位:

  • 遍历数据:无论是简单的列表、字典,还是复杂的二维网格,for 循环都能轻松遍历。
  • 枚举尝试:在数独求解中,for num in range(1, 10) 枚举所有可能数字,是回溯算法的基石。
  • 模式生成:杨辉三角的每一行都通过 for 循环递推构建,体现了循环与数学规律的结合。
  • 格式化输出:利用 for 循环控制打印格式,可以输出美观的图形(如数独棋盘、杨辉三角)。

掌握 for 循环,是通往 Python 编程高手的重要一步。希望本文的讲解和案例能帮助你更深入地理解并灵活运用这一强大的工具。

目录

  1. Python for 循环详解
  2. 1. 基本语法与常用场景
  3. 1.1 语法结构
  4. 1.2 常用遍历场景
  5. 遍历列表
  6. 输出:
  7. 我喜欢吃 苹果
  8. 我喜欢吃 香蕉
  9. 我喜欢吃 橙子
  10. 遍历元组
  11. 遍历字符串(字符序列)
  12. 输出:P-y-t-h-o-n-
  13. 遍历字典
  14. 遍历键(默认)
  15. 输出:name age city
  16. 遍历值
  17. 输出:张三 30 北京
  18. 同时遍历键和值
  19. 使用 range() 生成数字序列
  20. 生成 0 到 4
  21. 输出:0 1 2 3 4
  22. 生成 2 到 8,步长为 2
  23. 输出:2 4 6 8
  24. 使用索引遍历列表
  25. 使用 enumerate() 同时获取索引和元素
  26. 使用 zip() 并行遍历多个可迭代对象
  27. 循环控制:break 和 continue
  28. 查找第一个偶数
  29. 跳过偶数,打印奇数
  30. for...else 结构
  31. 检查列表中是否有偶数
  32. 列表推导式(简洁的 for 循环)
  33. 生成 0~9 的平方列表
  34. 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  35. 带条件的推导式(只保留偶数)
  36. 输出:[0, 4, 16, 36, 64]
  37. 遍历文件对象
  38. 2. 案例一:打印杨辉三角(数字金字塔)
  39. 2.1 使用组合数公式(math.comb)
  40. 2.2 使用迭代生成(递推关系)
  41. 3. 案例二:数独求解器(回溯算法)
  42. 3.1 数独的表示
  43. 3.2 合法性检查函数
  44. 3.3 回溯求解函数
  45. 3.4 打印函数
  46. 3.5 完整测试
  47. 定义数独(同上)
  48. 4. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型学习进阶之路:五级晋级指南
  • 本地部署多模态大模型:Open-WebUI 与 Dify 智能体实战
  • Python 自动化测试入门:编写与运行测试用例
  • 基于 Python 的高校题库考试组卷管理系统设计与实现
  • Vivado 2023.2 安装步骤详解:FPGA 开发环境搭建
  • 突破 LLM 上下文瓶颈:上下文内存虚拟化 CMV 的设计与实践
  • HTML、CSS、JavaScript 三者关系详解
  • OpenAI 发布最强推理模型 o1,大模型迎来新起点
  • Zynq PS 与 PL 数据交互设计及算法加速验证
  • 内网环境下搭建大模型微调平台实战指南
  • Python pytesseract 库:图像文字识别原理与实战
  • 网络安全、信息安全与数据安全的概念辨析
  • 深入理解 HTML5 Web Workers:提升网页性能的关键技术
  • OpenClaw 本地部署全自动制作 AI 漫剧教程
  • 哈希算法基础原理与常见应用
  • 工业级存储芯片 CSNP32GCR01-AOW 在无人机飞控系统中的应用实践
  • 多模态大模型解析表格任务:效果分析与实战总结
  • AI 时代产品经理成长之路:从方案交付到产品交付的能力进阶
  • AI 辅助编程工具对比:Copilot、Cursor、Claude Code 与 Codex 解析
  • 普元 Mobile SlidePage 子页面数据刷新方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online