hat.util.first

 1from collections.abc import Callable, Iterable
 2import typing
 3
 4
 5T = typing.TypeVar('T')
 6
 7
 8def first(xs: Iterable[T],
 9          fn: Callable[[T], typing.Any] = lambda _: True,
10          default: T | None = None
11          ) -> T | None:
12    """Return the first element from iterable that satisfies predicate `fn`,
13    or `default` if no such element exists.
14
15    Result of predicate `fn` can be of any type. Predicate is satisfied if it's
16    return value is truthy.
17
18    Args:
19        xs: collection
20        fn: predicate
21        default: default value
22
23    Example::
24
25        assert first(range(3)) == 0
26        assert first(range(3), lambda x: x > 1) == 2
27        assert first(range(3), lambda x: x > 2) is None
28        assert first(range(3), lambda x: x > 2, 123) == 123
29        assert first({1: 'a', 2: 'b', 3: 'c'}) == 1
30        assert first([], default=123) == 123
31
32    """
33    return next((i for i in xs if fn(i)), default)
def first( xs: Iterable[~T], fn: Callable[[~T], typing.Any] = <function <lambda>>, default: Optional[~T] = None) -> Optional[~T]:
 9def first(xs: Iterable[T],
10          fn: Callable[[T], typing.Any] = lambda _: True,
11          default: T | None = None
12          ) -> T | None:
13    """Return the first element from iterable that satisfies predicate `fn`,
14    or `default` if no such element exists.
15
16    Result of predicate `fn` can be of any type. Predicate is satisfied if it's
17    return value is truthy.
18
19    Args:
20        xs: collection
21        fn: predicate
22        default: default value
23
24    Example::
25
26        assert first(range(3)) == 0
27        assert first(range(3), lambda x: x > 1) == 2
28        assert first(range(3), lambda x: x > 2) is None
29        assert first(range(3), lambda x: x > 2, 123) == 123
30        assert first({1: 'a', 2: 'b', 3: 'c'}) == 1
31        assert first([], default=123) == 123
32
33    """
34    return next((i for i in xs if fn(i)), default)

Return the first element from iterable that satisfies predicate fn, or default if no such element exists.

Result of predicate fn can be of any type. Predicate is satisfied if it's return value is truthy.

Arguments:
  • xs: collection
  • fn: predicate
  • default: default value

Example::

assert first(range(3)) == 0
assert first(range(3), lambda x: x > 1) == 2
assert first(range(3), lambda x: x > 2) is None
assert first(range(3), lambda x: x > 2, 123) == 123
assert first({1: 'a', 2: 'b', 3: 'c'}) == 1
assert first([], default=123) == 123