Рассмотрим следующую программу, название которой должно быть само за себя. Мне нужно реализовать функцию next_index(it)
, которая возвращает индекс следующего элемента, который собирается вернуть итератор.
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)
Я знаю, что итераторы обычно используются, когда вам не нужен индекс, а для индекса мы можем использовать enumerate
. Однако я пытаюсь провести некоторый динамический анализ с трассировкой уровня bytecode . Циклы, подобные следующим, повторяются с использованием iterators . Мне нужно отслеживать индекс, к которому обращается итератор. Хотя должны быть обходные пути, например, точное отслеживание индекса в анализе prgroam, такая функция, как next_index(it)
, сделает это простым и менее подверженным ошибкам.
l = [0,1,2,3,4]
for c in l:
print(c)