c语言编程笔录

首页 >   > 笔记大全

笔记大全

如何理解python迭代器python迭代器有什么用

更新时间:2023-10-01

迭代器介绍

迭代器是一个数据访问的概念,它代表一个对象序列的底层结构。迭代器将访问对象序列的方式与实现细节分离开来。由于Python中的高级特性,我们可以使用迭代器来遍历序列对象,而不需考虑其组成和顺序。


# 以下示例是如何通过一个列表来创建迭代器。我们可以使用 next() 函数遍历这个迭代器,直到没有元素为止。
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)
print(next(my_iter))  # Output: 1
print(next(my_iter))  # Output: 2

什么是python迭代器

Python 迭代器是一个包含操作序列的对象。它可以被用来遍历列表、元组、字典等多种数据类型。Python 为迭代器协议提供了良好的支持,可以通过在类中实现 __iter__() 和 __next__() 方法来创建一个Python迭代器。


# 在以下示例中,我们定义了一个自定义的迭代器类,该类生成一个数字的无限序列,每个数字都是前一个数字的两倍。
class DoubleNumbers:
    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        self.n += 1
        return self.n * 2

d = DoubleNumbers()
i = iter(d)
print(next(i)) # Output: 2
print(next(i)) # Output: 4

使用Python迭代器的好处

使用 Python 迭代器具有以下好处:

  • 内存效率高: 迭代器每次生成一个新元素,因此可以在仅存储一个元素的情况下处理大型数据集。
  • 代码复用:可以使用现有的迭代器,而无需为每个数据类型编写新的遍历代码。
  • 更好的可读性:使用迭代器使代码更加简洁,可读性更高。

# 在以下示例中,我们使用迭代器来查找文本中的行数,如果行中包含指定的单词,则打印该行。

def search_word(file, word):
    with open(file) as f:
        for i, line in enumerate(f):
            if word in line:
                yield i, line.strip()

for line_number, line in search_word('example.txt', 'Python'):
    print(f'{line_number}:{line}')

迭代器的示例

以下示例展示了如何在 Python 中使用迭代器来过滤列表中的元素。


# 在以下示例中,我们使用迭代器来过滤适合于条件的元素。在该示例中,我们检查一个列表中的所有元素,并仅返回大于 3 的元素。

class FilterIterator:
    def __init__(self, lst):
        self.lst = lst
        self.i = 0

    def __iter__(self):
        return self

    def __next__(self):
        while self.i < len(self.lst):
            val = self.lst[self.i]
            self.i += 1
            if val > 3:
                return val
        raise StopIteration

lst = [1, 2, 3, 4, 0, -1, -2]
fi = FilterIterator(lst)
for i in fi:
  print(i) # Output: 4