Python中的迭代器与生成器

这篇具有很好参考价值的文章主要介绍了Python中的迭代器与生成器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 在Python中,迭代器(Iterator)和生成器(Generator)是两种用于处理可迭代对象的重要工具。而可迭代对象包括列表,元组,字典,字符串等。
  • 迭代器和生成器只能迭代一次,通常用于处理大型数据集,因为它们不会一次性加载所有数据到内存中,而是根据需要逐个生成值。

列表是迭代器吗?
在 Python 中,列表(List)是可迭代对象(Iterable),但并不是迭代器(Iterator)。但可以使用内置函数 iter() 将列表转换为迭代器。转换后的迭代器可以使用 next() 函数来逐个获取元素。文章来源地址https://www.toymoban.com/news/detail-684080.html

1、迭代器

  • 迭代器是一种对象,它可以被迭代/遍历并返回可迭代对象中的元素。
  • 迭代器对象从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  • 类是通过__iter__和__next__两个方法实现的:__ iter __() 方法返回迭代器对象本身,而 __ next () 方法返回序列中的下一个元素。当没有更多的元素可返回时, next __() 方法会引发 StopIteration 异常。创建迭代器对象后,就可以通过for循环或者next()来进行迭代/遍历。
class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        element = self.data[self.index]
        self.index += 1
        return element

my_list = [1, 2, 3, 4, 5]
my_iterator = MyIterator(my_list)

for element in my_iterator:
    print(element)

  • 对于可迭代对象来说,可以使用iter()方法创建迭代器,再使用for循环或者next()方法遍历元素。
>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

2、生成器

  • 生成器是一种用于创建迭代器的特殊函数。生成器内部使用 yield 关键字来产生一个值,而不是一次性产生所有值。这样做的潜在优点是可以节省大量的内存。
  • 创建生成器后可以用于迭代:每次调用生成器进行迭代时(依然可以使用for循环或者next方法),它会暂停执行并将 yield 后面的表达式作为当前迭代的值返回。下次调用时,它会从暂停的地方恢复执行。
def countdown(n):
    while n > 0:
        yield n
        n -= 1
 
# 创建生成器对象
generator = countdown(5)
 
# 通过迭代生成器获取值
print(next(generator))  # 输出: 5
print(next(generator))  # 输出: 4
print(next(generator))  # 输出: 3
 
# 使用 for 循环迭代生成器
for value in generator:
    print(value)  # 输出: 2 1

3、列表推导式和生成器表达式

  • 列表推导式和生成器表达式都是 Python 中用于创建新的可迭代对象的快捷方式。
  • 列表推导式使用方括号 [ ],并且可以包含一个或多个循环、条件语句以及表达式,可以在单行中根据已有的可迭代对象(如列表、元组等)生成一个新的列表。
squares = [x**2 for x in range(1, 6)]
print(squares)
# [1, 4, 9, 16, 25]
  • 生成器表达式与列表推导式的语法类似,但使用圆括号 ( ) 而不是方括号 [ ]。它返回一个生成器对象,可以逐个生成值,而不是创建完整的列表。这样可以节省内存,特别是当处理大量数据时。
squares = (x**2 for x in range(1, 6))
print(squares)

for square in squares:
    print(square)
''
<generator object <genexpr> at 0x000001234567890>
1
4
9
16
25
''

4、enumerate()

  • enumerate() 是 Python 内置函数之一,它用于同时遍历序列(如列表、元组等)的索引和对应的元素。
  • enumerate() 函数接受一个可迭代对象作为参数,并返回一个包含索引和元素组成的迭代器。
my_list = ['a', 'b', 'c']

for index, element in enumerate(my_list, start=1):
    print(index, element)
''
1, b
2, c
''

到了这里,关于Python中的迭代器与生成器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python基础篇(十):迭代器与生成器

    迭代器和生成器是Python中用于 处理可迭代对象 的重要概念。它们提供了一种有效的方式来 遍历和访问 集合中的元素,同时具有 节省内存和惰性计算 的特点。下面是关于迭代器和生成器的详细介绍和示例: 迭代器是一种实现了迭代协议的对象,它可以用于遍历集合中的元素

    2024年02月10日
    浏览(35)
  • 【Python】Python系列教程-- Python3 迭代器与生成器(二十)

    往期回顾: Python系列教程–Python3介绍(一) Python系列教程–Python3 环境搭建(二) Python系列教程–Python3 VScode(三) Python系列教程–Python3 基础语法(四) Python系列教程–Python3 基本数据类型(五) Python系列教程-- Python3 数据类型转换(六) Python系列教程-- Python3 推导式(

    2024年02月08日
    浏览(45)
  • python之迭代器和生成器

    当谈到Python中的迭代时,迭代器和生成器是两个很常见的概念。在本教程中,我将帮助您理解Python中迭代器和生成器的工作原理及其实现方式。 迭代器 Python中的迭代器是一种特殊的对象,可以用于遍历可迭代对象中的所有元素。所有的迭代器都实现了 __iter__() 和 __next__() 方

    2023年04月18日
    浏览(47)
  • Python教程(26)——Python迭代器和生成器详解

    Python中的迭代器是一种对象,它可以迭代(遍历)一个可迭代对象(比如列表、元组或字符串)的元素。迭代器用于实现迭代器协议,即包含 __iter__() 方法和 __next__() 方法。 迭代器的工作原理是每次调用 __next__() 方法时返回可迭代对象的下一个元素,当没有元素可迭代时,抛

    2024年02月19日
    浏览(38)
  • 8 python的迭代器和生成器

    概述         在上一节,我们介绍了Python的模块和包,包括:什么是模块、导入模块、自定义模块、__name__、什么是包、创建包、导入包等内容。在这一节中,我们将介绍Python的迭代器和生成器。在Python中,迭代器是一个非常重要的概念,它使得我们能够遍历一个序列而无

    2024年02月10日
    浏览(33)
  • python中函数,装饰器,迭代器,生成器

    1.函数可以作为参数进行传递 2.函数可以作为返回值进行返回 3.函数名称可以当成变量一样进行赋值操作 作用:在不改变原有函数调用的情况下,给函数增加新的功能          即可以在函数前面增加新的功能,但不改变原来的代码 可迭代的数据类型都会提供迭代器,即可以

    2024年02月07日
    浏览(37)
  • 【python高级用法】迭代器、生成器、装饰器、闭包

    可迭代对象:可以使用for循环来遍历的,可以使用isinstance()来测试。 迭代器:同时实现了__iter__()方法和__next__()方法,可以使用isinstance()方法来测试是否是迭代器对象 使用类实现迭代器 两个类实现一个迭代器 一个类实现迭代器 可迭代对象与迭代器的总结 一个具备了__iter_

    2024年02月03日
    浏览(32)
  • python使用迭代生成器yield减少内存占用的方法

    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。 其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。 首先我们用一个例子来演示一下迭代

    2024年04月28日
    浏览(26)
  • 【Python 4】列表与元组slice切片 迭代 列表生成式 生成器generator 迭代器Iterator对象

    在Python中,代码不是越多越好,而是越少越好 取一个list或tuple的部分元素是非常常见的操作 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3 如果第

    2024年02月07日
    浏览(44)
  • Python黑魔法:探秘生成器和迭代器的神奇力量

    在Python中,生成器和迭代器是实现惰性计算的两种重要工具,它们可以帮助我们更有效地处理数据,特别是在处理大数据集时,可以显著减少内存的使用。接下来,我们将详细介绍这两种工具。 迭代器是一种特殊的对象,它可以遍历一个集合中的所有元素。任何实现了__ite

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包