介绍
Python中的迭代器(Iterator)是一个非常重要的概念,它可以用来遍历集合(序列、列表等)中的每一个元素。在Python中,所有可以被遍历的对象都是可迭代对象(Iterable)。但是,迭代器与可迭代对象之间存在区别。本篇文章将会详细介绍Python中的迭代器和可迭代对象
迭代器
Python中的迭代器也是一个对象。迭代器的协议包括两个方法:iter() 和 next()。iter() 方法返回迭代器对象本身,next()
方法返回下一个迭代器对象。
具体来说,迭代器的作用是在遍历一个集合的时候,按照顺序依次访问集合中的每一个元素。迭代器只能往前遍历,不能后退,也不能随意修改集合中的元素。
在Python中,常用的内置迭代器包括iter()、next()、reversed()、enumerate()等等。
可迭代对象
可迭代对象是指实现了迭代器协议的对象,即包含 iter() 方法的对象。可迭代对象可以用来创建一个迭代器对象,从而进行遍历操作。
在Python中,常见的可迭代对象包括序列(list、tuple、str等)、集合(set、frozenset等)、字典(dict)等。
区别:可迭代对象和迭代器的区别在于,可迭代对象是一个包含 iter() 方法的对象,而迭代器则是实现了 iter() 和 next()
方法的对象。迭代器对象可以遍历可迭代对象中的元素,而可迭代对象本身并不具备遍历的能力。
案例
自己实现一个迭代器,该迭代器传入一个count,返回可以过滤返回1-count之间的偶数的迭代器
from collections.abc import Iterable, Iterator
class MyIterator:
def __init__(self, count):
self.count = count
self.index = 0
def __iter__(self):
return self
def __next__(self):
while self.index < self.count:
self.index += 1
if self.index % 2 == 0:
return self.index
raise StopIteration
my_iter = MyIterator(10)
print(isinstance(my_iter, Iterable))
print(isinstance(my_iter, Iterator))
for x in my_iter:
print(x)
xx = [x for x in my_iter]
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用filter()函数筛选出所有的偶数
result = list(filter(lambda x: x % 2 == 0, my_list))
print(result)
输出结果
True
True
2
4
6
8
10
[2, 4, 6, 8, 10]
在Python中内置的过滤器函数filter()也可以实现这个功能
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用filter()函数筛选出所有的偶数
result = list(filter(lambda x: x % 2 == 0, my_list))
print(result) # [2, 4, 6, 8, 10]
总结
可迭代对象是指实现了迭代器协议的对象,而迭代器则是实现了 iter() 和 next() 方法的对象。我们可以使用Python中内置的iter()
、next()、reversed()、enumerate()等函数来创建和操作迭代器对象,也可以使用filter()、map()
等函数来操作可迭代对象。在实际应用中,我们需要根据不同的需求选择不同的方法来进行操作,以便实现更加高效和优雅的代码。
欢迎关注,学习不迷路!