作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我写了这个并且期望 0
:
>>> x = range(20)
>>> next(x)
相反,我得到了:
TypeError: 'range' object is not an iterator
但我以为它是发电机?
最初的答案与我最初对自己说的相同:它是可迭代的,而不是交互器。但是,如果两者都只是生成器,那并不能解释为什么会这样:
>>> x = (i for i in range(30))
>>> next(x)
0
最佳答案
范围对象是可迭代的。但是,它不是 迭代器。
要获取迭代器,您需要调用 iter()
第一:
>>> r=range(5,15)
>>> next(iter(r))
5
>>> next(iter(r))
5
>>> next(iter(r))
5
>>> next(iter(r))
5
>>> i=iter(r)
>>> next(i)
5
>>> next(i)
6
>>> next(i)
7
>>> next(i)
8
>>> iter(r)
<range_iterator object at 0x10b0f0630>
>>> iter(r)
<range_iterator object at 0x10b0f0750>
>>> iter(r)
<range_iterator object at 0x10b0f0c30>
编辑:但请注意不要在每次调用 next()
时调用 iter()
。它在索引 0 处创建一个新的迭代器。
关于python - 为什么范围对象是 "not an iterator"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803830/
我是一名优秀的程序员,十分优秀!