迭代器和生成器是 Python 中非常有用的概念,它们允许你以高效的方式处理数据序列。
什么是迭代器?
迭代器是一个可以记住遍历的位置的对象。迭代器通常用于遍历集合类型(如列表、字典、集合、字符串)。
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)
print(next(my_iter)) # 输出: 1
print(next(my_iter)) # 输出: 2
什么是生成器?
生成器是一种特殊的迭代器,它允许你以函数的形式产生序列中的每个值,而不是一次性生成整个序列。
def my_generator():
for i in range(5):
yield i
my_gen = my_generator()
for val in my_gen:
print(val)
生成器与列表的区别
生成器与列表的主要区别在于它们如何存储数据。列表在内存中一次性存储所有元素,而生成器则按需生成每个元素。
# 列表
my_list = [1, 2, 3, 4, 5]
# 生成器
my_gen = (x for x in range(5))
# 列表占用内存
print(sys.getsizeof(my_list)) # 输出: 40
# 生成器占用内存
print(sys.getsizeof(my_gen)) # 输出: 48 (仅包含生成器对象本身,不包含序列中的元素)
示例:生成器与列表的性能比较
import time
# 列表
start_time = time.time()
my_list = [x * 2 for x in range(1000000)]
end_time = time.time()
print("List time:", end_time - start_time)
# 生成器
start_time = time.time()
my_gen = (x * 2 for x in range(1000000))
end_time = time.time()
print("Generator time:", end_time - start_time)
从上面的例子中可以看出,生成器在处理大量数据时比列表更加高效。
扩展阅读
Python 迭代器和生成器