迭代器(Iterator)在Python中是一种用于迭代访问元素的对象,它提供了一种统一的访问集合元素的方式。迭代器通常与可迭代对象(Iterable)一起使用,如列表、元组、字典等。以下是迭代器在Python中的应用场景:
遍历序列: 迭代器最常见的用途是遍历序列中的元素,例如列表、元组、字符串等。
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)
for item in my_iterator:
? ? print(item)
自定义迭代器: 可以通过定义一个类,实现 __iter__ 和 __next__ 方法,创建自定义的迭代器。
class MyIterator:
? ? def __init__(self, start, end):
? ? ? ? self.current = start
? ? ? ? self.end = end
? ? def __iter__(self):
? ? ? ? return self
? ? def __next__(self):
? ? ? ? if self.current > self.end:
? ? ? ? ? ? raise StopIteration
? ? ? ? else:
? ? ? ? ? ? self.current += 1
? ? ? ? ? ? return self.current - 1
my_iterator = MyIterator(1, 5)
for item in my_iterator:
? ? print(item)
生成器(Generator): 生成器是一种特殊的迭代器,它通过函数中的 yield 语句来生成值,避免了一次性生成大量数据。
def my_generator(start, end):
? ? current = start
? ? while current <= end:
? ? ? ? yield current
? ? ? ? current += 1
gen = my_generator(1, 5)
for item in gen:
? ? print(item)
使用内置函数: Python提供了一些内置函数,如 map()、filter()、zip() 等,它们返回的结果是迭代器。
# 使用 map() 创建迭代器
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x**2, numbers)
# 使用 filter() 创建迭代器
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# 使用 zip() 创建迭代器
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
zipped_data = zip(names, ages)
文件迭代器: 文件对象本身也是一种迭代器,可以逐行读取文件内容。
with open('example.txt', 'r') as file:
? ? for line in file:
? ? ? ? print(line.strip())
迭代器是Python中强大而灵活的工具,能够简化对数据的遍历和处理。通过使用迭代器,可以更加高效地处理大型数据集合,而不必一次性加载全部数据到内存中。