当前位置: 首页 > 面试题库 >

与python列表混淆:它们是迭代器还是不是迭代器?

贺亦
2023-03-14
问题内容

我正在研究[Alex Marteli的《Nutshell》中的Python,这本书建议具有next()方法的任何对象都是(或至少可以用作)
迭代器 。它还建议大多数迭代器是通过对称为的方法的隐式或显式调用构建的iter

阅读本书中的内容后,我感到有尝试的渴望。我启动了python 2.7.3解释器并执行以下操作:

>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
...     print x.next()

但是结果是这样的:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'

在混乱中,我尝试通过研究x对象的结构,dir(x)并发现它具有一个__iter__功能对象。因此,我弄清楚了它可以用作迭代器,只要它支持该类型的接口即可。

因此,当我再次尝试时,这次稍有不同,尝试这样做:

>>> _temp_iter = next(x)

我收到此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator

但是列表如何不能成为迭代器,因为它似乎支持该接口,并且可以肯定地在以下情况下用作一个迭代器:

>>> for number in x:
...     print x

有人可以帮我澄清一下这个想法吗?


问题答案:

它们是 可迭代的 ,但不是 迭代器 。可以将它们传递给iter()隐式地(例如通过for)或显式地为其获取迭代器,但是它们本身并不是迭代器。



 类似资料:
  • 问题内容: 我需要一个滚动窗口(也称为滑动窗口)可在序列/迭代器/生成器上使用。默认的Python迭代可视为一种特殊情况,其中窗口长度为1。我目前正在使用以下代码。有没有人有一个更蟒蛇,更少冗长,或更有效的方法来做这件事? 问题答案: 117 Python文档的旧版本中有一个带有示例: 文档中的一个更为简洁,我想它可以起到更大的作用。

  • 问题内容: 我有一个清单: 要从此列表中获取,有两种方法: 1。 2。 我的问题是,哪一个内存效率高且迭代速度快? 问题答案: 他们做同样的事情- 增强的循环对于长版本来说只是语法糖(对于可迭代对象;对于数组,它稍有不同)。除非您明确需要迭代器(例如,调用),否则我将使用第一个版本。 有关编译器执行的准确转换的更多详细信息,请参见Java语言规范的14.14.2节。

  • 本文向大家介绍Python迭代器与可迭代与生成器,包括了Python迭代器与可迭代与生成器的使用技巧和注意事项,需要的朋友参考一下 示例 一个迭代是一个对象,可以返回一个迭代器。具有状态且具有__iter__  方法并返回迭代器的任何对象都是可迭代的。也可能是没有状态的对象,该对象实现了__getitem__方法。-该方法可以获取索引(从零开始),并IndexError在索引不再有效时引发。 Py

  • 本文向大家介绍迭代器 Iterator 是什么?相关面试题,主要包含被问及迭代器 Iterator 是什么?时的应答技巧和注意事项,需要的朋友参考一下 terator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

  • 为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)。

  • 问题内容: 在一次采访中有人问我,使用迭代器使用for循环有什么好处,或者使用循环比迭代器有什么好处? 任何人都可以回答这个问题,以便将来如果我遇到类似的问题,那么我可以回答 问题答案: 首先,有两种for循环,它们的行为非常不同。一种使用索引: 这种循环并非总是可能的。例如,列表具有索引,而集合没有索引,因为它们是无序集合。 另一个foreach循环在幕后使用Iterator: 这适用于每种It