Python 迭代详解

迭代是Python的核心概念,理解它能让你的代码更优雅高效。

什么是迭代?
简单说,迭代就是逐个访问数据集合中的元素。

可以迭代的对象(可迭代对象)包括:列表、元组、字符串、字典、集合、文件对象等。

python

最经典的迭代

for item in [1, 2, 3]:
print(item)

  1. 可迭代对象 vs 迭代器
    可迭代对象:能被for循环遍历的东西(如列表、字符串)。它实现了__iter__()方法。

迭代器:记住了遍历位置的对象,只能往前走。它同时实现了__iter__()和__next__()方法。

python
my_list = [1, 2, 3] # 可迭代对象
iterator = iter(my_list) # 获取迭代器

print(next(iterator)) # 1
print(next(iterator)) # 2

继续调用next(iterator) 会抛出 StopIteration 异常

判断是否可迭代:

python
from collections.abc import Iterable
print(isinstance([1,2,3], Iterable)) # True
print(isinstance(123, Iterable)) # False
2. for循环的本质
for循环本质上就是:

调用iter()获取迭代器。

反复调用next()获取下一个值。

捕获StopIteration异常结束循环。

python

你写的代码

for item in my_list:
print(item)

实际等价于

iterator = iter(my_list)
while True:
try:
item = next(iterator)
print(item)
except StopIteration:
break
3. 常用迭代技巧
场景 代码示例
带索引遍历 for i, item in enumerate(fruits):
遍历字典 for key, value in person.items():
并行遍历 for name, age in zip(names, ages):
反向遍历 for item in reversed(my_list):
4. 生成器——更优雅的迭代器
用yield关键字代替return,函数就变成了生成器。

python
def count_down(n):
while n > 0:
yield n
n -= 1

for num in count_down(5):
print(num) # 5 4 3 2 1
生成器最大的好处:惰性求值,节省内存!

python

列表:一次性创建所有元素,占用大量内存

squares_list = [x**2 for x in range(1000000)]

生成器:按需生成,几乎不占内存

squares_gen = (x**2 for x in range(1000000))

print(next(squares_gen)) # 0
print(next(squares_gen)) # 1
5. 常见陷阱:不要在迭代时修改序列
python
numbers = [1, 2, 3, 4]

❌ 错误:在迭代时修改列表,会导致跳过元素

for num in numbers:
if num % 2 == 0:
numbers.remove(num)

✅ 正确:遍历副本(如切片[:])

for num in numbers[:]:
if num % 2 == 0:
numbers.remove(num)
6. 快速总结对比
特性 可迭代对象 迭代器 生成器
可多次迭代 ✅ ❌ ❌
实现 iter ✅ ✅ ✅
实现 next ❌ ✅ ✅
使用 yield ❌ ❌ ✅
典型场景 数据容器(列表、字典) 自定义遍历逻辑 大数据流、无限序列
一句话总结
需要一次性处理大量数据?用生成器。需要反复遍历?用列表。想要自定义遍历逻辑?实现迭代器。

迭代是Python的优雅之道,掌握它,代码功力上升一个台阶。

posted @ 2026-04-09 08:31  ichint  阅读(2)  评论(0)    收藏  举报