【问题标题】:Why doesn't next(iter(x)) advance to the next iterable?为什么 next(iter(x)) 不前进到下一个可迭代对象?
【发布时间】:2018-09-12 13:36:18
【问题描述】:

当我将 L 分配给 iter(x),然后 next(L) 遍历 x 列表时,我很困惑为什么迭代代码有效。如下图所示:

x=[1,2,3,4,5]
>>> L=iter(x)
>>> next(L)
1
>>> next(L)
2
>>> next(L)
3
>>> next(L)
4
>>> next(L)
5
>>> next(L)

但是当我手动编写 next(iter(x)) 来遍历 x 列表时,它不起作用:

next(iter(x))
1
>>> next(iter(x))
1
>>> next(iter(x))
1

【问题讨论】:

  • iter() 每次都会创建一个 new 可迭代

标签: python iterator iteration


【解决方案1】:
next(iter(x))

等价于

it = iter(x)
next(it)

因此,在第二种情况下,您每次都重复这两个指令,您首先从iterable 创建一个iterator,然后应用next() 函数获取每次第一个元素。
所以你永远不会消耗它,而是每次都重新创建它。

【讨论】:

    【解决方案2】:

    在 Python 中,迭代器是在创建后被使用的对象。在您的第一个示例中,您创建了一个迭代器并提取它的元素,直到它被耗尽。在您的第二个示例中,您每次都创建一个新的迭代器,提取其第一个元素,然后丢弃它(通过垃圾收集器)。

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2021-01-20
      • 2021-03-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多