You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
44 lines
1.2 KiB
4 years ago
|
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
|