程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Python 基础

    • 环境搭建
    • 标识符
    • 变量
    • 缩进和注释
    • 数据类型
    • 数据类型转换
    • 运算符
    • 字符串
    • 列表
    • 元组
    • 字典
    • 集合
    • if判断
    • for循环
      • 1. for 循环的核心:遍历可迭代对象
      • 2. 使用 range() 函数进行数值循环
      • 3. 遍历字典:键、值与键值对
      • 4. 循环控制:break 与 continue
        • 4.1 break:立即终止循环
        • 4.2 continue:跳过当前迭代
      • 5. 嵌套 for 循环:处理多维数据
      • 6. 优雅的遍历工具:enumerate 和 zip
        • 6.1 enumerate():同时获取索引和元素
        • 6.2 zip():并行遍历多个序列
      • 7. for-else 语句:循环结束后的附加操作
      • 8. for 循环的升华:推导式 (Comprehensions)
      • 9. 最佳实践与常见陷阱
    • while循环
    • 循环综合练习
    • Python函数
    • 函数与循环实战
    • 生成式
    • 文件读写
    • 面向对象
    • 面向对象综合案例
  • Python 进阶

  • Python
  • Python 基础
scholar
2025-07-20
目录

for循环

# for 循环

在 Python 中,for 循环是处理重复性任务最强大、最常用的工具之一。它能让你优雅地“遍历”一个数据集合中的每一项,并对它们执行操作。本指南将带你从基础到高级,彻底掌握 for 循环的方方面面。


# 1. for 循环的核心:遍历可迭代对象

for 循环的本质是遍历 (Iteration)。所谓遍历,就是逐一访问一个集合中所有元素的过程。

  • 可迭代对象 (Iterable):任何可以被 for 循环遍历的对象都是可迭代对象。Python 中最常见的可迭代对象包括:

    • 序列类型:列表 list, 元组 tuple, 字符串 str
    • 映射类型:字典 dict
    • 集合类型:集合 set
    • 其他:range() 对象、文件对象等。
  • 基本语法结构:

    for temporary_variable in iterable:
        # 对 temporary_variable 执行的代码块
        # 每一轮循环,temporary_variable 都会被赋予 iterable 中的下一个元素
        ...
    
    1
    2
    3
    4
  • 示例:遍历列表和字符串

    # 遍历一个水果列表
    fruits = ["apple", "banana", "cherry"]
    print("--- 遍历水果列表 ---")
    for fruit in fruits:
        print(f"当前水果是: {fruit}")
    # 输出:
    # 当前水果是: apple
    # 当前水果是: banana
    # 当前水果是: cherry
    
    # 遍历一个字符串
    text = "Python"
    print("\n--- 遍历字符串 ---")
    for char in text:
        print(char, end=' ') # end=' ' 让输出不换行,用空格分隔
    # 输出: P y t h o n 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

# 2. 使用 range() 函数进行数值循环

当你需要循环指定的次数,或者需要一个数字序列时,range() 函数是最佳选择。

  • range(stop): 生成从 0 到 stop-1 的整数序列。
  • range(start, stop): 生成从 start 到 stop-1 的整数序列。
  • range(start, stop, step): 生成从 start 到 stop-1,每次递增 step 的整数序列。
# 示例 1: 循环 5 次
print("--- range(5) ---")
for i in range(5):
    print(i) # 输出: 0, 1, 2, 3, 4

# 示例 2: 从 2 到 5
print("\n--- range(2, 6) ---")
for i in range(2, 6):
    print(i) # 输出: 2, 3, 4, 5

# 示例 3: 1到10之间的奇数
print("\n--- range(1, 10, 2) ---")
for i in range(1, 10, 2):
    print(i) # 输出: 1, 3, 5, 7, 9
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3. 遍历字典:键、值与键值对

遍历字典时,你可以选择只遍历键、只遍历值,或者同时遍历键值对。

student = {"name": "Alice", "age": 25, "major": "CS"}

# 方法 1: 直接遍历字典 (默认遍历键)
print("--- 遍历键 ---")
for key in student:
    print(f"键: {key}, 值: {student[key]}")
# 输出:
# 键: name, 值: Alice
# 键: age, 值: 25
# 键: major, 值: CS

# 方法 2: 使用 .values() 遍历值
print("\n--- 遍历值 ---")
for value in student.values():
    print(value)
# 输出:
# Alice
# 25
# CS

# 方法 3: 使用 .items() 遍历键值对 (最常用)
print("\n--- 遍历键值对 ---")
for key, value in student.items():
    print(f"{key} -> {value}")
# 输出:
# name -> Alice
# age -> 25
# major -> CS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 4. 循环控制:break 与 continue

break 和 continue 可以在循环内部提供更精细的流程控制。

# 4.1 break:立即终止循环

当循环遇到 break 语句时,会立即完全终止当前的 for 循环,程序将执行循环之后的代码。

# 场景:在列表中找到第一个目标数字就停止
numbers = [1, 5, 8, 12, 7, 20]
target = 12

for num in numbers:
    print(f"正在检查: {num}")
    if num == target:
        print(f"找到了目标数字 {target}!")
        break # 立即跳出循环
print("循环结束。")
# 输出:
# 正在检查: 1
# 正在检查: 5
# 正在检查: 8
# 正在检查: 12
# 找到了目标数字 12!
# 循环结束。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 4.2 continue:跳过当前迭代

当循环遇到 continue 语句时,会跳过当前这一轮循环的剩余部分,直接进入下一轮迭代。

# 场景:只打印列表中的偶数
numbers = [1, 2, 3, 4, 5, 6]

for num in numbers:
    if num % 2 != 0: # 如果是奇数
        continue # 跳过本次循环的 print 语句
    print(f"发现一个偶数: {num}")
# 输出:
# 发现一个偶数: 2
# 发现一个偶数: 4
# 发现一个偶数: 6
1
2
3
4
5
6
7
8
9
10
11

# 5. 嵌套 for 循环:处理多维数据

在一个 for 循环内部嵌套另一个 for 循环,常用于处理二维数据结构,如矩阵(列表的列表)。

# 示例:打印九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}x{i}={i*j}\t", end="") # \t 是制表符,end="" 防止换行
    print() # 在每行结束后换行

# 输出:
# 1x1=1	
# 1x2=2	2x2=4	
# 1x3=3	2x3=6	3x3=9	
# ... (以此类推)
1
2
3
4
5
6
7
8
9
10
11

# 6. 优雅的遍历工具:enumerate 和 zip

# 6.1 enumerate():同时获取索引和元素

enumerate() 函数可以让你在遍历时,同时获得每个元素的索引和值,使代码更简洁。

fruits = ["apple", "banana", "cherry"]

# 传统方式
# i = 0
# for fruit in fruits:
#     print(f"{i}: {fruit}")
#     i += 1

# 使用 enumerate (推荐)
for index, fruit in enumerate(fruits):
    print(f"索引 {index} 对应水果 {fruit}")
# 输出:
# 索引 0 对应水果 apple
# 索引 1 对应水果 banana
# 索引 2 对应水果 cherry
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 6.2 zip():并行遍历多个序列

zip() 函数可以将多个可迭代对象“压缩”在一起,让你可以在一次循环中并行地遍历它们。

注意:zip() 会在最短的那个可迭代对象耗尽时停止。

students = ["Alice", "Bob", "Charlie"]
scores = [95, 88, 72]

for student, score in zip(students, scores):
    print(f"{student} 的分数是 {score}")
# 输出:
# Alice 的分数是 95
# Bob 的分数是 88
# Charlie 的分数是 72
1
2
3
4
5
6
7
8
9

# 7. for-else 语句:循环结束后的附加操作

for 循环可以带有一个 else 子句。这个 else 块的执行时机非常特殊:它只在 for 循环正常、完整地执行完毕(即没有被 break 语句中断)后才会执行。

# 场景1:循环正常结束
print("--- 场景1:寻找数字 10 ---")
numbers = [1, 3, 5, 7]
for num in numbers:
    if num == 10:
        print("找到了 10!")
        break
else:
    # 因为循环跑完了都没找到 10,所以 else 会执行
    print("列表中没有找到 10。")
# 输出:
# --- 场景1:寻找数字 10 ---
# 列表中没有找到 10。

# 场景2:循环被 break 中断
print("\n--- 场景2:寻找数字 5 ---")
numbers = [1, 3, 5, 7]
for num in numbers:
    if num == 5:
        print("找到了 5!")
        break # 循环在此处中断
else:
    # 因为循环被 break 了,所以 else 不会执行
    print("列表中没有找到 5。")
# 输出:
# --- 场景2:寻找数字 5 ---
# 找到了 5!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 8. for 循环的升华:推导式 (Comprehensions)

推导式是一种极其 Pythonic 的语法,它允许你用一行代码,通过 for 循环来快速创建列表、集合或字典。

  • 列表推导式 (List Comprehension)

    # 创建一个包含 0 到 9 平方的列表
    squares = [x**2 for x in range(10)]
    print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    1
    2
    3
  • 字典推导式 (Dictionary Comprehension)

    # 创建一个数字及其平方的字典
    square_dict = {x: x**2 for x in range(5)}
    print(square_dict) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
    
    1
    2
    3

# 9. 最佳实践与常见陷阱

  1. 不要在循环中修改你正在迭代的序列! 在 for 循环中对列表或字典进行添加或删除操作,可能会导致不可预知的行为或错误。如果需要修改,最好是创建一个新列表,或迭代原列表的副本 (for item in my_list[:])。

  2. 明确循环变量的意义: 给循环变量起一个有意义的名字(如 for fruit in fruits: 而不是 for x in my_list:),这能极大地提高代码的可读性。

  3. 善用 enumerate 和 zip: 当需要索引或需要并行处理多个序列时,优先使用这两个内置函数,它们比手动管理索引更高效、更不易出错。

编辑此页 (opens new window)
上次更新: 2025/07/23, 06:33:16
if判断
while循环

← if判断 while循环→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式