Test if all elements of a python list are False
Basically there are two functions that deal with an iterable and return True or False depending on which boolean values elements of the sequence evaluate to.
all(iterable)
returns True if all elements of theiterable
are considered as true values (likereduce(operator.and_, iterable)
).any(iterable)
returns True if at least one element of theiterable
is a true value (again, using functional stuff,reduce(operator.or_, iterable)
).
Using the all
function, you can map operator.not_
over your list or just build a new sequence with negated values and check that all the elements of the new sequence are true:
>>> all(not element for element in data)
With the any
function, you can check that at least one element is true and then negate the result since you need to return False
if there's a true element:
>>> not any(data)
According to De Morgan's law, these two variants will return the same result, but I would prefer the last one (which uses any
) because it is shorter, more readable (and can be intuitively understood as "there isn't a true value in data") and more efficient (since you don't build any extra sequences).
Here is another approach using the generator expression:
data = [False, False, False]try: out = next(elt for elt in data if elt) # holds the value of first non-empty elementexcept StopIteration: print("all elements are empty")data = [[], [], [1], [2]]try: out = next(elt for elt in data if elt) # [1]except StopIteration: print("all elements are empty")