Python-迭代器

时间:2023-01-11 01:24:27

介绍

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()
等函数来操作可迭代对象。在实际应用中,我们需要根据不同的需求选择不同的方法来进行操作,以便实现更加高效和优雅的代码。


欢迎关注,学习不迷路!