Here is a wrapper class for an iterator that gives you a hasNext property:
class IteratorEx(object): def __init__(self, it): self.it = iter(it) self.sentinel = object() self.nextItem = next(self.it, self.sentinel) self.hasNext = self.nextItem is not self.sentinel def next(self): ret, self.nextItem = self.nextItem, next(self.it, self.sentinel) self.hasNext = self.nextItem is not self.sentinel return ret def __iter__(self): while self.hasNext: yield self.next()
Demo:
iterex = IteratorEx(xrange(10)) for i in iterex: print i, iterex.hasNext
Print
0 True 1 True 2 True 3 True 4 True 5 True 6 True 7 True 8 True 9 False
source share