| 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 |