迭代器和生成器是 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 迭代器和生成器