Consider the following program, from the title which should be self explanatory . I need to implement the function next_index(it) that returns the index of next item an iterator is about to return. def next_index(it): #do something here #return the index of next element the iterator will fetch return -1 #dummy value being returned now l = [0,1,2,3,4] it = iter(l) fst = it.__next__() print(fst) # prints 0, the next call to it.__next__() will return the element at index 1 n_i = next_index(it) #n_i should be 1 print(n_i) _ = it.__next__() n_i = next_index(it) #n_i should be 2 now print(n_i) I know that iterators are typically used when you do not need the index and for index we can use enumerate. However, I am trying to do some dynamic analysis with bytecode level tracing. Loops like the following are iterated using iterators. I need to track the index being accessed by the iterator. Though there should be workarounds, e.g., keeping track of the index in the analysis prgroam explicitely, a function like next_index(it) would make it easy and less error-prone. l = [0,1,2,3,4] for c in l: print(c) Continue reading...