Python3 循环语句

在 Python 3 中,循环语句用于重复执行一段代码。与 C++ 或 Java 不同,Python 只有两种循环for 循环和 while 循环。

其中,for 循环是绝对的主力,因为它专门用于遍历任何可迭代对象(如列表、字符串、字典等),语法极其优雅。

下面我将从 for 循环的核心用法控制流关键字高级技巧,为你系统梳理 Python 3 的循环语句。


一、 for 循环:遍历的艺术

for 循环的本质是“迭代器协议”:它会自动从对象中逐个取出元素,直到取完为止。

1. 基础遍历 (列表、字符串、元组)

纯文本
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# 遍历字符串
for char in "Python":
    print(char, end=" ")  # 输出: P y t h o n 

2. 配合 range() 生成数字序列

当你需要循环特定次数,或需要索引时,range() 是最佳搭档。

纯文本
# range(stop): 0 到 stop-1
for i in range(3):
    print(i)  # 输出: 0, 1, 2

# range(start, stop, step): 指定起点、终点和步长
for i in range(2, 10, 2):
    print(i, end=" ")  # 输出: 2 4 6 8

# 倒序遍历
for i in range(5, 0, -1):
    print(i, end=" ")  # 输出: 5 4 3 2 1

3. 遍历字典 (Dictionary)

纯文本
user = {"name": "Alice", "age": 25, "city": "Beijing"}

# 默认遍历键 (Keys)
for key in user:
    print(key)

# 遍历键值对 (最常用)
for key, value in user.items():
    print(f"{key}: {value}")

# 仅遍历值 (Values)
for value in user.values():
    print(value)

二、 for 循环的黄金搭档:enumeratezip

这是 Python 循环中最能体现“优雅”的两个内置函数,强烈建议掌握。

1. enumerate():同时获取索引和值

新手常犯的错误是 for i in range(len(my_list)):,在 Python 中这被视为不优雅的做法。

纯文本
fruits = ["apple", "banana", "cherry"]

# ✅ 推荐做法:同时拿到索引 (index) 和值 (fruit)
for index, fruit in enumerate(fruits):
    print(f"索引 {index} 的水果是 {fruit}")

# 可以指定起始索引
for index, fruit in enumerate(fruits, start=1):
    print(f"第 {index} 个: {fruit}")

2. zip():并行遍历多个序列

当你需要同时遍历两个或多个长度相同的列表时,zip 会将它们“打包”成元组。

纯文本
names = ["Alice", "Bob", "Charlie"]
scores = [95, 88, 92]

for name, score in zip(names, scores):
    print(f"{name} 的分数是 {score}")

三、 循环控制流:breakcontinuepass

这三个关键字用于在循环内部精细控制执行流程。

关键字作用类比
break立即终止整个循环,跳出循环体。遇到红灯,直接下车不走了。
continue跳过本次循环的剩余代码,直接进入下一次迭代。遇到红灯,等绿灯亮了继续走。
pass占位符,什么都不做。用于保持语法完整性。遇到红灯,原地发呆(为了语法不报错)。

代码示例

纯文本
# break 示例:找到第一个偶数就停止
for num in [1, 3, 5, 8, 9, 10]:
    if num % 2 == 0:
        print(f"找到偶数: {num}")
        break  # 循环彻底结束

# continue 示例:跳过所有偶数,只打印奇数
for num in range(1, 6):
    if num % 2 == 0:
        continue  # 跳过本次,不执行下面的 print
    print(f"奇数: {num}")

# pass 示例:搭建代码框架时防止报错
for i in range(3):
    pass  # TODO: 以后再来写这里的逻辑

四、 Python 独有特性:循环的 else 子句 🌟

Python 的 forwhile 循环都可以带一个 else 块。
规则:只有当循环正常结束(即没有被 break 强行打断)时,else 块才会执行。

经典应用场景:搜索与验证

纯文本
target = "grape"
fruits = ["apple", "banana", "cherry", "orange"]

for fruit in fruits:
    if fruit == target:
        print(f"✅ 找到了: {target}")
        break  # 找到了,打断循环,else 将被跳过
else:
    # 只有当 for 循环完整遍历完 fruits,且没有触发 break 时,才会执行这里
    print(f"❌ 遍历完毕,未找到 {target}")

💡 优势:省去了设置 found = False 这样的额外标志变量,代码更 Pythonic。


五、 循环的性能与最佳实践

1. 优先使用“推导式” (Comprehensions) 替代简单的 for 循环

如果循环的目的仅仅是生成一个新的列表、字典或集合,请使用推导式。它在底层由 C 语言优化,运行速度更快,且代码更紧凑。

纯文本
# ❌ 传统 for 循环 (较慢且啰嗦)
squares = []
for i in range(5):
    if i % 2 == 0:
        squares.append(i**2)

# ✅ 列表推导式 (更快且优雅)
squares = [i**2 for i in range(5) if i % 2 == 0]

2. 避免在循环中修改正在遍历的列表

这会导致索引错乱或跳过元素。

纯文本
# ❌ 危险操作
nums = [1, 2, 3, 4]
for n in nums:
    if n == 2:
        nums.remove(n)  # 可能会导致后续元素被跳过

# ✅ 安全做法:遍历原列表的副本,或使用推导式生成新列表
nums = [n for n in nums if n != 2]

3. for vs while 的选择指南

  • 已知迭代次数或需要遍历集合 👉 绝对使用 for 循环。
  • 未知循环次数,依赖某个条件变为 False 👉 使用 while 循环(如等待用户输入、游戏主循环、网络重试)。

总结

Python 的循环设计哲学是 “遍历对象”而非“控制索引”。掌握 for ... in ...enumeratezip 以及 break/continue/else 的组合,你就能应对 99% 的循环需求。

你想看一个具体的实战例子吗?比如:如何用循环和 zip 快速合并两个 Excel 表格的数据,或者如何用 while 实现一个带有超时重试机制的网络请求?随时告诉我!