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``