为什么next(iter(x))不前进到下一个可迭代的?

时间:2018-09-12 13:36:19

标签: python iterator iteration

大家好,我刚刚开始学习如何编写python代码。我感到困惑,为什么当我将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

如果我使用的任何技术术语不准确,我深表歉意,但我希望你们能理解我的问题,并为我提供有关此问题的一些指导。谢谢!

2 个答案:

答案 0 :(得分:1)

next(iter(x))

等同于

it = iter(x)
next(it)

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

答案 1 :(得分:0)

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