Path 1: 561 calls (0.57)

list (561)

tuple (561) None (561)

GeneratorExit (121)

1def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
2    """Iterate and generate a tuple with a flag for first and last value."""
3    iter_values = iter(values)
4    try:
5        previous_value = next(iter_values)
6    except StopIteration:
7        return
8    first = True
9    for value in iter_values:
10        yield first, False, previous_value
11        first = False
12        previous_value = value
13    yield first, True, previous_value
            

Path 2: 391 calls (0.4)

list (390) ['apples', 'oranges', 'pears', 'lemons'] (1)

tuple (1364) None (391) (True, False, 'apples') (1) (False, False, 'oranges') (1) (False, False, 'pears') (1) (False, True, 'lemons') (1)

GeneratorExit (73)

1def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
2    """Iterate and generate a tuple with a flag for first and last value."""
3    iter_values = iter(values)
4    try:
5        previous_value = next(iter_values)
6    except StopIteration:
7        return
8    first = True
9    for value in iter_values:
10        yield first, False, previous_value
11        first = False
12        previous_value = value
13    yield first, True, previous_value
            

Path 3: 36 calls (0.04)

[] (36)

None (36)

StopIteration (36)

1def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
2    """Iterate and generate a tuple with a flag for first and last value."""
3    iter_values = iter(values)
4    try:
5        previous_value = next(iter_values)
6    except StopIteration:
7        return
8    first = True
9    for value in iter_values:
10        yield first, False, previous_value
11        first = False
12        previous_value = value
13    yield first, True, previous_value