how to check whether list contains only None in python

Question:

l=[None,None]

is there a function that checks whether list l contains only None or not?

Asked By: goblin2986

||

Answers:

Try any() – it checks if there is a single element in the list which is considered True in a boolean context. None evaluates to False in a boolean context, so any(l) becomes False.

Note that, to check if a list (and not its contents) is really None, if l is None must be used. And if not l to check if it is either None (or anything else that is considered False) or empty.

Answered By: Alexander Gessler

If you mean, to check if the list l contains only None,

if all(x is None for x in l):
  ...
Answered By: kennytm
L == [None] * len(L)

is much faster than using all() when L is all None

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)'
1000 loops, best of 3: 276 usec per loop
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)'
10000 loops, best of 3: 34.2 usec per loop
Answered By: John La Rooy

If you want to check if the members of the list are None, then you can loop over the items and check if they are None

If you want to check if list itself is None, you can use type(varlist) and it will return None

you can do

if (lst == None):
… print “yes”

works.

Answered By: powerrox

I personally prefer making a set and then verifying if it is equal to a set with one element None:

set(l) == {None}

assert set([None, None, None]) == {None}
assert set([None, 2, None])    != {None}

Not the fastest but still faster than the all(...) implementation:

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)'
10000 loops, best of 3: 59 usec per loop
$ python -m timeit -s'L=[None]*1000' 'set(L)=={None}'
100000 loops, best of 3: 17.7 usec per loop
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)'
100000 loops, best of 3: 7.17 usec per loop
Answered By: Filippo Vitale
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.