| from typing import Iterable, Tuple, TypeVar | |
| T = TypeVar("T") | |
| def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: | |
| """Iterate and generate a tuple with a flag for first value.""" | |
| iter_values = iter(values) | |
| try: | |
| value = next(iter_values) | |
| except StopIteration: | |
| return | |
| yield True, value | |
| for value in iter_values: | |
| yield False, value | |
| def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: | |
| """Iterate and generate a tuple with a flag for last value.""" | |
| iter_values = iter(values) | |
| try: | |
| previous_value = next(iter_values) | |
| except StopIteration: | |
| return | |
| for value in iter_values: | |
| yield False, previous_value | |
| previous_value = value | |
| yield True, previous_value | |
| def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: | |
| """Iterate and generate a tuple with a flag for first and last value.""" | |
| iter_values = iter(values) | |
| try: | |
| previous_value = next(iter_values) | |
| except StopIteration: | |
| return | |
| first = True | |
| for value in iter_values: | |
| yield first, False, previous_value | |
| first = False | |
| previous_value = value | |
| yield first, True, previous_value | |