title: 迭代 description:Python 迭代(Iteration)教程

Python 迭代(Iteration)教程

大家好!今天来聊聊 Python 中最常用、也最基础的核心概念之一——迭代。它能帮你用最简洁的语法,遍历几乎所有“序列型”或“集合型”的对象,是写 Python 代码绕不开的基本功。


什么是迭代?

简单来说,迭代就是通过循环逐个“拿”出可迭代对象里的元素,处理完一个再拿一个的过程。和其他语言(比如 C/C++/Java)常用索引+ while/for 的手动遍历不同,Python 直接用 for...in 语法做迭代,既直观又安全(不容易越界)。


基础迭代:从最熟悉的序列开始

Python 内置的 listtuplestr 都是“天然可迭代”的,上手非常快。

1. 迭代列表(List)

拿水果列表举个🌰:

fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
    print(f"I love {fruit}!")

运行后会依次输出每句对应水果的话,完全不用关心索引是多少。

2. 迭代元组(Tuple)

元组的迭代方式和列表一模一样:

colors = ('red', 'green', 'blue')
for color in colors:
    print(color)

特殊迭代:字典(Dict)的三种打开方式

字典也是可迭代对象,但默认只会遍历键(key)。Python 还提供了两个专门的方法,让你灵活遍历值或键值对:

1. 默认遍历键

person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
for key in person:
    print(f"Key: {key}")

2. 只遍历值 .values()

for value in person.values():
    print(f"Value: {value}")

3. 同时遍历键和值 .items()

这是最常用的字典迭代方式,配合元组解包(后面会提)一步到位:

for key, value in person.items():
    print(f"{key}: {value}")

冷门但实用:字符串也是可迭代的!

你没看错,字符串可以被拆成单个字符逐个处理:

text = "Python"
for char in text:
    print(char)

进阶1:怎么判断对象能不能迭代?

不是所有东西都能放进 for...in 里的,比如整数、浮点数就不行。这时候可以用 collections.abc 模块的 Iterable 类来检查:

from collections.abc import Iterable

print(isinstance('abc', Iterable))  # ✅ 字符串可迭代
print(isinstance([1,2,3], Iterable))# ✅ 列表可迭代
print(isinstance(123, Iterable))    # ❌ 整数不可迭代

进阶2:带索引的迭代 enumerate()

有时候你既需要元素,又需要它在序列里的位置(比如更新列表里的特定元素),这时候 enumerate() 就派上用场了:

fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
    print(f"Index {index}: {fruit}")

运行后会输出 Index 0: apple 这样带位置的内容。


进阶3:同时迭代多个序列

Python 支持两种“多序列迭代”的方式,都非常简洁:

1. 序列里直接是元组/列表——元组解包

比如一组坐标对,每次可以同时取出 xy

coordinates = [(1, 2), (3, 4), (5, 6)]
for x, y in coordinates:
    print(f"x: {x}, y: {y}")

2. 多个独立序列——zip()打包

如果是两个分开的列表(比如姓名和年龄),可以用 zip() 把它们“绑”成一组元组再解包:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

⚠️ 注意:如果两个序列长度不一样,zip() 会以最短的那个为准截断。


进阶4:反向/排序后迭代

Python 内置了两个函数,帮你快速调整迭代顺序:

1. 反向迭代 reversed()

numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
    print(num)

2. 排序后迭代 sorted()

sorted() 会生成一个新的有序序列再迭代,不会修改原对象:

numbers = [3, 1, 4, 1, 5, 9, 2]
for num in sorted(numbers):
    print(num)

实践练习:查找列表的最小和最大值

学了这么多,来做个小练习巩固一下——写一个函数,输入一个数字列表,返回它的最小值和最大值(空列表返回 (None, None)):

def findMinAndMax(L):
    if not L:  # 处理空列表
        return (None, None)
    
    min_val = max_val = L[0]
    for num in L:
        if num < min_val:
            min_val = num
        if num > max_val:
            max_val = num
    return (min_val, max_val)

# 简单的单元测试
if findMinAndMax([]) != (None, None):
    print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
    print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
    print('测试失败!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
    print('测试失败!')
else:
    print('🎉 测试成功!')

总结

  1. Python 用 for...in 语法做迭代,安全又直观
  2. 内置的 listtupledictstr 都是可迭代对象
  3. 字典默认迭代键,可用 .values()/.items() 迭代值/键值对
  4. enumerate() 能同时获取索引和元素
  5. zip() 可以打包多个独立序列迭代
  6. reversed()/sorted() 能调整迭代顺序
  7. collections.abc.Iterable 可以检查对象是否可迭代

迭代是 Python 编程的基石,掌握好这些技巧,能让你的代码更“Pythonic”(简洁、优雅、高效)!