Path 1: 223 calls (0.98)

list (223)

tuple (223)

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

Path 2: 4 calls (0.02)

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

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

GeneratorExit (1)

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

Path 3: 1 calls (0.0)

[] (1)

None (1)

StopIteration (1)

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