from collections.abc import Iterable, Iterator def smart_iter[T]( iterable: Iterable[T], *, start: int = 0 ) -> Iterator[tuple[int, bool, T]]: it = iter(iterable) num = start try: current = next(it) except StopIteration: return for next_item in it: yield num, False, current current = next_item num += 1 yield num, True, current