You wait all day for a bus…
Any
and all
didn’t appear in Python until version 2.5, released in 2006, when the language was already well into its teens.
Why the delay in offering such fundamental functions? An oversight? Or simply that they’re so easy to implement they weren’t thought necessary. Either way, they’re here now.
The functions are closely related and complementary. We can define any
in terms of all
and vice-versa.
def any_(xs): return not all(map(operator.not_, xs)) def all_(xs): return not any(map(operator.not_, xs))
C++ reached its 30s before introducing its own versions of these logical algorithms, any_of
and all_of
, but made up for lost time by finding room for a third, none_of
, which is not any_of
.
template <class Iter, class Pred> bool none_of_(Iter b, Iter e, Pred p) { return std::find_if(b, e, p) == e; } template <class Iter, class Pred> bool any_of_(Iter b, Iter e, Pred p) { return !none_of_(b, e, p); } template <class Iter, class Pred> bool all_of_(Iter b, Iter e, Pred p) { return !any_of_(b, e, std::not1(p)); }