Python学习之迭代器详解
什么是迭代器?
迭代器是Python中用于遍历可迭代对象的一种机制。将一个可迭代对象传入内置函数iter()
中,可以获得一个对应的迭代器对象。通过调用__next__()
方法,迭代器可以一个一个地返回可迭代对象中的元素,遍历完所有元素后,再调用__next__()
会触发StopIteration
异常。
创建迭代器的方法
Python中有两种创建迭代器的方式:
1. 使用 iter() 和 next() 函数
- 使用
iter()
函数将可迭代对象转化为迭代器:
my_list = [1, 2, 3]
it = iter(my_list)
- 使用
next()
函数输出迭代器对象的下一个元素:
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 3
2. 在自定义类中实现迭代器
通过在自定义类中实现__iter__()
和__next__()
方法,可以创建自己的迭代器。__iter__()
方法返回迭代器对象本身,而__next__()
方法返回迭代器中的下一个元素。
例如,我们可以定义一个叫做MyList
的类,并在其中实现迭代器:
class MyList:
def __init__(self):
self.data = [1, 2, 3]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index == len(self.data):
raise StopIteration
value = self.data[self.index]
self.index += 1
return value
这样,我们就可以创建一个MyList
对象,并在使用for
循环时遍历其中的元素:
my_list = MyList()
for i in my_list:
print(i)
输出结果为:
1
2
3
迭代器应用示例
1. 自定义斐波那契数列迭代器
class Fibonacci:
def __init__(self, n):
self.n = n
self.current = 0
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
if self.current >= self.n:
raise StopIteration
if self.current == 0:
self.current += 1
return self.a
elif self.current == 1:
self.current += 1
return self.b
else:
self.current += 1
result = self.a + self.b
self.a = self.b
self.b = result
return result
通过调用自定义的Fibonacci
类,我们可以得到一组迭代器:
f = Fibonacci(10)
for i in f:
print(i)
输出结果为:
0
1
1
2
3
5
8
13
21
34
2. 列表生成式
列表生成式是一种简洁而强大的语法,通过运用迭代器的机制,可以快速地创建列表。例如,下面的代码使用列表生成式和filter()
函数将列表中的所有偶数保留下来:
my_list = [1, 2, 3, 4, 5, 6]
even = [i for i in my_list if i % 2 == 0]
print(even) # [2, 4, 6]
在列表生成式中,首先my_list
被转换为一个迭代器,然后每个元素被遍历并通过if
语句进行筛选,最终得到一个新列表。