上一篇
Python迭代机制详解 - 从基础到高级应用 | Python编程教程
- Python
- 2025-08-18
- 1242
Python迭代机制完全指南
掌握可迭代对象、迭代器与生成器的核心概念
什么是迭代?
迭代是Python中访问集合元素的一种方式,它允许我们逐个访问数据集合中的元素,而不需要知道集合的内部结构。
简单来说:迭代就是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。在Python中,每次对过程重复称为一次"迭代"。
可迭代对象 vs 迭代器
可迭代对象 (Iterable)
- 实现了
__iter__()方法的对象 - 可以被用于
for循环 - 可以多次使用
- 例如:列表、元组、字典、字符串
迭代器 (Iterator)
- 实现了
__iter__()和__next__()方法的对象 - 可以记住遍历的位置
- 只能遍历一次
- 例如:文件对象、生成器
关键区别:所有迭代器都是可迭代对象,但并非所有可迭代对象都是迭代器。可迭代对象可以转换为迭代器使用 iter() 函数。
迭代基础:使用for循环
Python中最常见的迭代方式是使用 for 循环:
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 遍历字典
person = {"name": "张三", "age": 30, "city": "北京"}
for key, value in person.items():
print(f"{key}: {value}")
# 遍历字符串
text = "Python"
for char in text:
print(char)
手动迭代:iter()和next()
了解底层机制:手动控制迭代过程
# 创建可迭代对象
numbers = [1, 2, 3, 4, 5]
# 转换为迭代器
numbers_iter = iter(numbers)
# 手动获取元素
print(next(numbers_iter)) # 输出: 1
print(next(numbers_iter)) # 输出: 2
print(next(numbers_iter)) # 输出: 3
# 继续迭代剩余元素
for num in numbers_iter:
print(num) # 输出: 4, 5
# 尝试获取超出范围的元素会引发StopIteration异常
try:
print(next(numbers_iter))
except StopIteration:
print("迭代结束")
创建自定义迭代器
通过实现 __iter__() 和 __next__() 方法创建自定义迭代器:
class Countdown:
def __init__(self, start):
self.current = start
def __iter__(self):
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
else:
num = self.current
self.current -= 1
return num
# 使用自定义迭代器
countdown = Countdown(5)
for num in countdown:
print(num) # 输出: 5, 4, 3, 2, 1
生成器:简化迭代器创建
生成器是一种更简单的创建迭代器的方法,使用 yield 关键字:
# 生成器函数
def fibonacci(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
# 使用生成器
fib_gen = fibonacci(100)
for num in fib_gen:
print(num, end=" ") # 输出: 0 1 1 2 3 5 8 13 21 34 55 89
# 生成器表达式
squares = (x*x for x in range(10))
print("\n平方数:", list(squares))
生成器优势:内存高效(惰性计算)、代码简洁、支持无限序列
迭代工具与技巧
enumerate()
同时获取索引和元素
fruits = ["苹果", "香蕉", "橙子"]
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
zip()
并行迭代多个序列
names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
for name, age in zip(names, ages):
print(f"{name}今年{age}岁")
itertools模块
提供高级迭代工具
import itertools
# 无限计数器
counter = itertools.count(start=10, step=2)
# 排列组合
perms = itertools.permutations("ABC", 2)
迭代最佳实践总结
- 优先使用
for循环进行迭代 - 处理大文件时使用迭代器避免内存溢出
- 需要索引时使用
enumerate() - 并行迭代使用
zip() - 创建复杂迭代器时使用生成器
- 了解迭代器只能使用一次的特性
- 使用
itertools处理复杂迭代逻辑 - 惰性求值可以提升性能
本文由GanXian于2025-08-18发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://pjw.521pj.cn/20258406.html
发表评论