codekingpro/portable-devtools
114k
1from typing import Iterable, Tuple, TypeVar2 3T = TypeVar("T")4 5 6def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:7 """Iterate and generate a tuple with a flag for first value."""8 iter_values = iter(values)9 try:10 value = next(iter_values)11 except StopIteration:12 return13 yield True, value14 for value in iter_values:15 yield False, value16 17 18def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:19 """Iterate and generate a tuple with a flag for last value."""20 iter_values = iter(values)21 try:22 previous_value = next(iter_values)23 except StopIteration:24 return25 for value in iter_values:26 yield False, previous_value27 previous_value = value28 yield True, previous_value29 30 31def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:32 """Iterate and generate a tuple with a flag for first and last value."""33 iter_values = iter(values)34 try:35 previous_value = next(iter_values)36 except StopIteration:37 return38 first = True39 for value in iter_values:40 yield first, False, previous_value41 first = False42 previous_value = value43 yield first, True, previous_value44 