any(), all() and empty iterable

Albert Hopkins marduk at letterboxes.org
Sun Apr 12 06:39:11 CEST 2009


On Sun, 2009-04-12 at 04:00 +0000, John O'Hagan wrote:
> Hi,
> 
> I was getting some surprising false positives as a result of not expecting 
> this:
> 
> all(element in item for item in iterable)
> 
> to return True when 'iterable' is empty. 
> 
> I guess it goes into hairy Boolean territory trying to decide if an element is 
> in an item that doesn't exist (if that's what's happening), but I would have 
> thought not. It seems inconsistent with the behaviour of
> 
> any(element in item for item in iterable)
> 
> which returns False when 'iterable' is empty.
> 
>From the docs:

all(iterable)
        
        Return True if all elements of the iterable are true. Equivalent
        to:
        
        def all(iterable):
            for element in iterable:
                if not element:
                    return False
            return True
        
        
any(iterable)
        
        Return True if any element of the iterable is true. Equivalent
        to:
        
        def any(iterable):
            for element in iterable:
                if element:
                    return True
            return False
        
        
> Sorry if this has come up before, but 'any' and 'all' make for fruitless 
> googling!

Try Googling for:

"any site:docs.python.org"






More information about the Python-list mailing list