如何在python中检查列表是否只包含None

时间:2010-08-27 11:58:30

标签: python

l=[None,None]

是否有一个函数检查列表l是否只包含None?

5 个答案:

答案 0 :(得分:30)

如果您的意思是,检查列表l是否仅包含无,

if all(x is None for x in l):
  ...

答案 1 :(得分:20)

L == [None] * len(L)
所有无

时,

比使用all()要快得多

$ 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

答案 2 :(得分:8)

尝试any() - 它检查列表中是否有一个元素在布尔上下文中被视为TrueNone在布尔上下文中评估为False,因此any(l)变为False

请注意,要检查列表(而不是其内容)是否真的None,必须使用if l is None。并if not l检查是否为“无”(或其他任何被视为False)或为空的内容。

答案 3 :(得分:3)

我个人更喜欢制作set,然后验证它是否等于具有一个元素None的集合:

set(l) == {None}

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

不是最快但仍然比all(...)实施更快:

$ 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

答案 4 :(得分:0)

如果要检查列表成员是否为None,则可以循环查看项目并检查它们是否为无

如果要检查列表本身是否为None,可以使用type(varlist),它将返回None

你可以做到

if(lst == None): ...打印“是”

作品。