这是什么 .next() 什么是迭代器?力扣代码 284

what is this .next() and what is the iterator ? leetcode 284

尝试“LeetCode 284. 窥视迭代器”:https://leetcode.com/problems/peeking-iterator/

参考解决方案:

01. class PeekingIterator(object):
02.     def __init__(self, iterator):
03.         self.iter = iterator
04.         self.temp = self.iter.next() if self.iter.hasNext() else None
05. 
06.     def peek(self):
07.         return self.temp
08. 
09.    def next(self):
10.        ret = self.temp
11.        self.temp = self.iter.next() if self.iter.hasNext() else None
12.        return ret
13.
14.    def hasNext(self):
15.        return self.temp is not None

我有两个问题:

  1. 第 4 行:self.iter.next().next() 是指 line 9 中的方法吗?我尝试放置打印语句,但发现打印语句仅在 Leetcode 调用 line 9 def next(self): 而不是 line 4 时调用。所以在我看来 .next() 是一个 Python 内置迭代器函数。但是没有这样的功能。这就是我感到困惑的原因。最重要的是,如果它是 line 9 中的方法,它将被迭代调用,但它似乎并没有这样做(查看打印语句)。

  2. 第二题比较复杂。在 line 2 处创建 class 的输入是 [[1,2,3]]

这是一个 Python 列表。然而在 __init__ 中,我无法执行迭代器 [0] 或 next(iterator)。所以我很困惑为什么会这样。我收到以下错误:

但我可以print(f'{iterator.next()=}')

所以我的第二个问题是 __init__ 到底收到了什么。它不是列表和迭代器。

抱歉我的问题很长。我希望我已经足够清楚地解释了我的问题。在此先感谢您的帮助。

看起来有问题的代码实现了自己的 Iterator class,它具有 .next() 方法并将 [1,2,3] 输入转换为此 class 的实例.这也是第 4 行中的 self.iter.next() 调用的内容。您必须使用给定的界面。

这个习惯 class 是 next(iterator) 不起作用的原因(因为 sit 没有实现 __iter____next__ 方法)以及 iterator[0](因为它不再是输入数组) 它实现了 iterator.next(),就像您的 PeekingIterator 应该的那样。

你得到的是一个Iterator,与pythoniterator完全无关,他们可以(也许应该)称它为ClassWithNextAndHasNextMethods.您在 __init__.

中收到了 class 的一个实例

不,self.iter.next() 不是指第 9 行,self.next() 会那样做。 self.iter.next() 正在对传递给构造函数的对象调用 next() 方法。