首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python列表迭代器行为和next(迭代器)

Python列表迭代器行为和next(迭代器)
EN

Stack Overflow用户
提问于 2013-05-29 21:17:47
回答 6查看 247.9K关注 0票数 170

考虑一下:

代码语言:javascript
复制
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2

因此,正如预期的那样,推进迭代器是通过改变同一个对象来处理的。

在这种情况下,我希望:

代码语言:javascript
复制
a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)

跳过第二个元素:对next的调用应该使迭代器前进一次,然后循环进行的隐式调用应该前进第二次-第二次调用的结果将被赋值给i

循环会打印列表中的所有项,而不会跳过任何项。

我的第一个想法是这可能会发生,因为循环对传递的内容调用iter,这可能会给出一个独立的迭代器-这不是这种情况,因为我们有iter(a) is a

那么,为什么next在这种情况下看起来没有推进迭代器呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-29 21:21:17

您所看到的是解释器回显next()的返回值,以及在每次迭代中打印i

代码语言:javascript
复制
>>> a = iter(list(range(10)))
>>> for i in a:
...    print(i)
...    next(a)
... 
0
1
2
3
4
5
6
7
8
9

所以0print(i)的输出,1next()的返回值,由交互式解释器回显,等等。只有5次迭代,每次迭代导致2行被写入终端。

如果您指定next()的输出,事情就会按预期运行:

代码语言:javascript
复制
>>> a = iter(list(range(10)))
>>> for i in a:
...    print(i)
...    _ = next(a)
... 
0
2
4
6
8

或者打印额外的信息,以区分print()输出和交互式解释器回显:

代码语言:javascript
复制
>>> a = iter(list(range(10)))
>>> for i in a:
...    print('Printing: {}'.format(i))
...    next(a)
... 
Printing: 0
1
Printing: 2
3
Printing: 4
5
Printing: 6
7
Printing: 8
9

换句话说,next()按预期工作,但因为它返回迭代器的下一个值,并由交互式解释器响应,所以您会认为循环以某种方式拥有自己的迭代器副本。

票数 226
EN

Stack Overflow用户

发布于 2013-05-29 21:23:23

发生的情况是,next(a)返回a的下一个值,该值被打印到控制台,因为它不受影响。

你能做的就是用这个值来影响一个变量:

代码语言:javascript
复制
>>> a = iter(list(range(10)))
>>> for i in a:
...    print(i)
...    b=next(a)
...
0
2
4
6
8
票数 17
EN

Stack Overflow用户

发布于 2013-05-30 22:32:32

我发现现有的答案有点令人困惑,因为它们只间接地指出了代码示例中令人费解的本质:"print i“和"next(a)”都会导致打印其结果。

由于它们打印的是原始序列的交替元素,并且"next(a)“语句正在打印,因此看起来"print i”语句正在打印所有的值。

从这个角度来看,将"next(a)“的结果赋值给一个变量会禁止打印它的结果,因此只打印"i”循环变量的替换值。同样,让"print“语句发出更独特的东西也可以消除歧义。

(其中一个现有答案反驳了其他答案,因为该答案将示例代码计算为一个块,因此解释器不会报告“next(A)”的中间值。)

一般来说,回答问题的诱人之处在于,一旦你知道了答案,你就会清楚地知道什么是显而易见的。它可能是难以捉摸的。同样地,一旦你理解了答案,就对它们进行评论。很有趣..。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16814984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档