How to achieve python's any() with a custom predicate?

any, filterfunction, functional-programming, python, python-2.7

Solution

Use a generator expression as that one argument:

any(x > 10 for x in l)

Here the predicate is in the expression side of the generator expression, but you can use any expression there, including using functions.

Demo:

>>> l = range(10)
>>> any(x > 10 for x in l)
False
>>> l = range(20)
>>> any(x > 10 for x in l)
True

The generator expression will be iterated over until `any()` finds a `True` result, and no further:

>>> from itertools import count
>>> endless_counter = count()
>>> any(x > 10 for x in endless_counter)
True
>>> # endless_counter last yielded 11, the first value over 10:
...
>>> next(endless_counter)
12

Problem

``` >>> l = list(range(10)) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> if filter(lambda x: x > 10, l): ... print "foo" ... else: # the list will be empty, so bar will be printed ... print "bar" ... bar ``` I'd like to use `any()` for this instead, but `any()` only takes one argument: the iterable. Is there a better way?

Original source