Python基础:迭代器(Iterators)详解

在这里插入图片描述

什么是迭代器?

  迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1. 迭代对象

  Python中使用迭代器的地方很多,大多数的容器对象都是可迭代对象,如列表、元组、字典、字符串等,均可以使用for语句进行迭代循环,如

for element in [1,2,3]:
    print(element)
for element in ('a','b','c'):
    print(element)
for key in {'one':1,'two':2}:
    print(key)
for char in 'abc':
    print(char)
for line in open('test.txt',encoding='utf-8'):
    print(line,end=' ')

  这种访问风格清晰、简洁又方便。
  迭代器的使用非常普遍并使得 Python 成为一个统一的整体。 在幕后,for语句会在容器对象上调用iter()
  该函数返回一个定义了__next__() 方法的迭代器对象,此方法将逐一访问容器中的元素。 当元素用尽时,__next__() 将引发 StopIteration 异常来通知终止for 循环。 可以使用next() 内置函数来调用 __next__() 方法。

2. 使用 next()方法

在这里插入图片描述

  字符‘abc’可以正常使用next()三次,当迭代次数超过了字符串中的元素个数,就会抛出StopIteration异常

3. 其他迭代器示例

# 使用内置的 iter() 和 next() 函数
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)

# 逐个输出列表中的元素
print(next(my_iterator))  # 输出 1
print(next(my_iterator))  # 输出 2
# 使用生成器函数创建迭代器
def square_generator(n):
    for i in range(n):
        yield i ** 2

squares = square_generator(5)
for square in squares:
    print(square)
# 使用 enumerate() 构建迭代器获取元素和索引
my_list = ['apple', 'banana', 'orange']

for index, value in enumerate(my_list):
    print(f"Index: {index}, Value: {value}")
# 使用 zip() 合并多个可迭代对象
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"Name: {name}, Age: {age}")

4. 自定义迭代器

4.1 自定义iter()和next()

定义一个方法 返回一个带有方法的对象。如果类 定义,然后可以返回:__next__()__iter__()self

class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

rev = Reverse('spam')
iter(rev)

for char in rev:
    print(char)

4.2 自定义迭代器中实现斐波那契数列

  斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

class Fibonacci:
    def __init__(self, limit):
        self.limit = limit
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.a <= self.limit:
            result = self.a
            self.a, self.b = self.b, self.a + self.b
            return result
        else:
            raise StopIteration

fib_iter = Fibonacci(20)
for num in fib_iter:
    print(num)

  生成:

在这里插入图片描述

  使用迭代器的主要优势是它们不需要在开始时就加载整个数据集到内存中。这对于大数据集或者流数据尤其有用。
  迭代器是Python中一个强大而灵活的工具,可以简化遍历复杂数据结构的过程。通过理解和使用迭代器,可以编写出更高效、更优雅的Python代码。

5 参考:

迭代器官方文档

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snail哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值