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