How to check if all elements of a list match a condition? How to check if all elements of a list match a condition? python python

How to check if all elements of a list match a condition?


The best answer here is to use all(), which is the builtin for this situation. We combine this with a generator expression to produce the result you want cleanly and efficiently. For example:

>>> items = [[1, 2, 0], [1, 2, 0], [1, 2, 0]]>>> all(flag == 0 for (_, _, flag) in items)True>>> items = [[1, 2, 0], [1, 2, 1], [1, 2, 0]]>>> all(flag == 0 for (_, _, flag) in items)False

Note that all(flag == 0 for (_, _, flag) in items) is directly equivalent to all(item[2] == 0 for item in items), it's just a little nicer to read in this case.

And, for the filter example, a list comprehension (of course, you could use a generator expression where appropriate):

>>> [x for x in items if x[2] == 0][[1, 2, 0], [1, 2, 0]]

If you want to check at least one element is 0, the better option is to use any() which is more readable:

>>> any(flag == 0 for (_, _, flag) in items)True


If you want to check if any item in the list violates a condition use all:

if all([x[2] == 0 for x in lista]):    # Will run if all elements in the list has x[2] = 0 (use not to invert if necessary)

To remove all elements not matching, use filter

# Will remove all elements where x[2] is 0listb = filter(lambda x: x[2] != 0, listb)


You could use itertools's takewhile like this, it will stop once a condition is met that fails your statement. The opposite method would be dropwhile

for x in itertools.takewhile(lambda x: x[2] == 0, list)    print x