l=[None,None]
是否有一个函数检查列表l是否只包含None?
答案 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()
- 它检查列表中是否有一个元素在布尔上下文中被视为True
。 None
在布尔上下文中评估为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): ...打印“是”
作品。