44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
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
|