Python3 - 手动遍历迭代器

问题

遍历一个可迭代对象中的所有元素,但是却不想使用for循环。

解决方案

为了手动地遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常。 比如:

# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])

# 循环:
while True:
    try:
        x = next(it)    # 获得下一个值
        print(x, end = ' ')
    except StopIteration:       # 遇到StopIteration就退出循环
        break

1 2 3 4 5 

通常来讲, StopIteration 用来指示迭代的结尾。 手动使用 next() 函数的话,可以通过返回一个指定值来标记结尾,比如 None 。 比如:

it = iter([1, 2, 3, 4, 5])
while True:
    x = next(it, None)
    if x is None:
        break
    print(x, end = ' ')

1 2 3 4 5 

讨论

大多数情况下,我们会使用 for 循环语句,遍历一个可迭代对象。 但是,偶尔也需要对迭代做更加精确的控制,了解底层迭代机制是必要的。

下面的交互示例,演示了迭代期间所发生的基本细节:

items = [1, 2, 3]
it = iter(items)

print(next(it))
1
print(next(it))
2
print(next(it))
3
print(next(it))
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
StopIteration
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 更深入理解 Python 中的迭代 深入探讨 Python 的 for 循环来看看它们在底层如何工作,以及为什么它...
    lvyz0207阅读 2,567评论 3 10
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,893评论 0 27
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,172评论 0 9
  • 早起的学习经历:初中起学习作曲;大学山东大学物理学院;研究生北京电影学院(王黎光老师)。研究生期间,在Sounds...
    LynneGong阅读 763评论 0 0
  • 无记忆于脑海中 无青春至入孤冢 无人曾和我与共 时间你太过慷慨 皆因此生无聊赖 连狗都不能开怀 ——朴诗·嗯嗯,我...
    朴达铁夫阅读 451评论 0 1

友情链接更多精彩内容