Skip to content

Commit 5e61319

Browse files
committed
loop file
1 parent fc9738e commit 5e61319

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/textual/_loop.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import Iterable, Tuple, TypeVar
2+
3+
T = TypeVar("T")
4+
5+
6+
def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:
7+
"""Iterate and generate a tuple with a flag for first value."""
8+
iter_values = iter(values)
9+
try:
10+
value = next(iter_values)
11+
except StopIteration:
12+
return
13+
yield True, value
14+
for value in iter_values:
15+
yield False, value
16+
17+
18+
def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:
19+
"""Iterate and generate a tuple with a flag for last value."""
20+
iter_values = iter(values)
21+
try:
22+
previous_value = next(iter_values)
23+
except StopIteration:
24+
return
25+
for value in iter_values:
26+
yield False, previous_value
27+
previous_value = value
28+
yield True, previous_value
29+
30+
31+
def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
32+
"""Iterate and generate a tuple with a flag for first and last value."""
33+
iter_values = iter(values)
34+
try:
35+
previous_value = next(iter_values)
36+
except StopIteration:
37+
return
38+
first = True
39+
for value in iter_values:
40+
yield first, False, previous_value
41+
first = False
42+
previous_value = value
43+
yield first, True, previous_value

0 commit comments

Comments
 (0)