any() and all() on empty list?

Steve R. Hastings steve at
Wed Mar 29 07:32:51 CEST 2006

So, Python 2.5 will have new any() and all() functions.

any(seq) returns True if any value in seq evaluates true, False otherwise.

all(seq) returns True if all values in seq evaluate true, False otherwise.

I have a question: what should these functions return when seq is an empty

Here is Guido's original article where he suggested any() and all():

He offered this sample code for the semantics of any() and all():

def any(S):
    for x in S:
        if x:
            return True
    return False

def all(S):
    for x in S:
        if not x:
            return False
    return True

And he pointed out how nifty it is to combine generator functions with
these two new functions:

any(x > 42 for x in S)     # True if any elements of S are > 42
all(x != 0 for x in S)     # True if all elements if S are nonzero

I'm completely on board with the semantics for any().  But all() bothers
me.  If all() receives an empty list, it will return True, and I don't
like that.  To me, all() should be a more restrictive function than any(),
and it bothers me to see a case where any() returns False but all()
returns True.

In the all() example, if there *are* no values in S, then none of the
values can be != 0, and IMHO all() should return False.

Therefore, I propose that all() should work as if it were written this way:

def all(S):
    ret_val = False

    for x in S:
        ret_val = True
        if not x:
            return False

    return ret_val


P.S. I searched with Google, and with Google Groups, trying to find
anyplace this might have been discussed before.  Apologies if this has
already been discussed and I missed it somehow.
Steve R. Hastings    "Vita est"
steve at

More information about the Python-list mailing list