【发布时间】:2018-07-18 15:43:33
【问题描述】:
我在 Zigzag Iterator 上编程,它是通过以下方式迭代一个 2D 列表:
[1,4,7]
[2,5,8,9]
[3,6]
到
[1,2,3,4,5,6,7,8,9]
我实现了一个算法:
class ZigzagIterator:
def __init__(self, vecs):
self.vecs = []
self.turns = 0
for vec in vecs:
vec and self.vecs.append(iter(vec))
def next(self):
try:
elem = self.vecs[self.turns].next()
self.turns = (self.turns+1) % len(self.vecs)
return elem
except StopIteration:
self.vecs.pop(self.turns)
if self.hasNext():
self.turns %= len(self.vecs)
def hasNext(self):
return len(self.vecs) > 0
if __name__ == "__main__":
s = ZigzagIterator([[1,4,7],[2,5,8,9],[3,6]])
while s.hasNext():
print s.next()
>>> 1 2 3 4 5 6 7 8 None None 9 None
我知道问题是因为我在每个列表的 next() 中再调用 1 次,然后我得到 3 次无。我可以通过使用 java 检查 Havenext 方法来解决此问题。我还可以在 python 中实现一个 hasext 迭代器。我的问题是如何以更 Pythonic 的方式解决这个问题,而不是用 Java 来思考它。
【问题讨论】: