# Most Time/space Efficient Way To Check If All Elements In List Of Integers Are 0

## 26 November 2018 - 1 answer

This is an implementation question for Python 2.7

Say I have a list of integers called `nums`, and I need to check if all values in `nums` are equal to zero. `nums` contains many elements (i.e. more than 10000), with many repeating values.

Using `all()`:

``````if all(n == 0 for n in set(nums)):  # I assume this conversion from list to set helps?
# do something
``````

Using set subtraction:

``````if set(nums) - {0} == set([]):
# do something
``````

Edit: better way to do the above approach, courtesy of user U9-Forward

``````if set(nums) == {0}:
# do something
``````

How do the time and space complexities compare for each of these approaches? Is there a more efficient way to check this?

Note: for this case, I am trying to avoid using numpy/pandas.

Any set conversion of `nums` won't help as it will iterate the entire list:

``````if all(n == 0 for n in nums):
# ...
``````

is just fine as it stops at the first non-zero element, disregarding the remainder.

Asymptotically, all these approaches are linear with random data. Implementational details (no repeated function calls on the generator) makes `not any(nums)` even faster, but that relies on the absence of any other falsy elements but`0`, e.g. `''` or `None`.