首页 / Python3 入门教程 / for 循环与迭代

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} 是质数")
Tip

for-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 循环语句」等,改写后所得。