# Python solution following correct pattern

• I have looked at a bunch of solutions that don't seem to conform to the proper pattern. I believe this is the correct pattern for iterators (at least in Python). You can call hasNext() any amount of times and get the same result (in other words it is idempotent). Also, next() by convention should raise StopIteration if you're trying to get next and there's nothing left.

``````class Vector2D(object):

def __init__(self, vec2d):
"""
:type vec2d: List[List[int]]
"""
self.vec2d = vec2d
self.arr_ptr = 0
self.sub_arr_ptr = 0
self.next_tuple = None

def next(self):
"""
:rtype: int
"""
if self.hasNext():
row, col = self.next_tuple
val = self.vec2d[row][col]
self.next_tuple = None
return val

else:
raise StopIteration()

def hasNext(self):
"""
:rtype: bool
"""
if self.next_tuple is not None:
return True

while self.arr_ptr < len(self.vec2d):
while self.sub_arr_ptr < len(self.vec2d[self.arr_ptr]):
self.next_tuple = (self.arr_ptr, self.sub_arr_ptr)
self.sub_arr_ptr += 1
return True
self.sub_arr_ptr = 0
self.arr_ptr += 1

return False

``````

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.