Python3 入门教程
for 循环与迭代
本教程共 70 篇 · 第 19 篇 · 更新于 2026-07-22 · 约 3 分钟阅读
PythonPython3 入门教程for循环rangeenumeratezip
19. for 循环与迭代
本节目标:掌握 for-in、range、enumerate、zip 的用法,用 Python 的方式遍历数据。
基本用法
Python 的 for 循环不是 C 语言风格的「计数循环」,而是迭代循环——逐个取出可迭代对象里的元素:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
输出:
apple
banana
cherry
可以遍历任何可迭代对象:列表、元组、字符串、字典、文件等。
range()
需要按次数循环时,用 range() 生成整数序列:
for i in range(5):
print(i)
# 0 1 2 3 4
range() 的几种形式:
range(5) # 0, 1, 2, 3, 4(从 0 开始到 5 之前)
range(2, 6) # 2, 3, 4, 5(从 2 开始到 6 之前)
range(0, 10, 2) # 0, 2, 4, 6, 8(步长为 2)
range(10, 0, -1) # 10, 9, 8, ... , 1(倒序)
Note
range()返回的是一个「惰性」对象,不是列表。需要列表时显式转换:list(range(5))。
遍历字符串
for char in "Python":
print(char)
遍历字典
user = {"name": "Alice", "age": 25}
for key in user: # 遍历键
print(key)
for value in user.values(): # 遍历值
print(value)
for key, value in user.items(): # 遍历键值对
print(f"{key}: {value}")
enumerate:同时拿索引和值
需要索引时,别自己维护计数器,用 enumerate:
fruits = ["apple", "banana", "cherry"]
# 不好的做法
i = 0
for fruit in fruits:
print(f"{i}: {fruit}")
i += 1
# 好的做法
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
enumerate 默认从 0 开始计数,也可以指定起点:
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
# 1. apple
# 2. banana
# 3. cherry
zip:并行遍历多个序列
把多个序列「拉链」到一起,每次取各序列的对应元素:
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 今年 {age} 岁")
输出:
Alice 今年 25 岁
Bob 今年 30 岁
Charlie 今年 35 岁
Warning
zip以最短的序列为准。如果序列长度不一致,多余的元素会被忽略。
a = [1, 2, 3]
b = ["a", "b"]
list(zip(a, b)) # [(1, 'a'), (2, 'b')]
如果要以最长的为准,用 itertools.zip_longest:
from itertools import zip_longest
list(zip_longest(a, b, fillvalue="?"))
# [(1, 'a'), (2, 'b'), (3, '?')]
for…else
跟 while 一样,for 循环也有 else:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} = {x} * {n // x}")
break
else:
# 没有 break 时执行,即 n 是质数
print(f"{n} 是质数")
Tipfor-else 的 else 属于 for 循环,不是 if。它只在循环没有被 break 时执行。这个设计初看有点怪,但在「查找」场景下很顺手。
迭代器协议(浅尝)
for 循环底层调用的是迭代器协议。了解这个能帮你理解很多 Python 特性:
>>> it = iter([1, 2, 3])
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
StopIteration
for 循环本质上就是不断调用 next(),直到捕获 StopIteration 异常。后面章节会深入讲迭代器和生成器。
来源:参考了 runoob「Python3 循环语句」、liaoxuefeng「循环」、w3cschool「Python3 循环语句」等,改写后所得。