如何检查列表中的所有项目是否为无?

In [27]: map( lambda f,p: f.match(p), list(patterns.itervalues()), vatids ) Out[27]: [None, <_sre.SRE_Match object at 0xb73bfdb0>, None] 

该列表可以是全部None或其中之一是一个re.Match实例。 我可以在退货清单上做一次class轮支票,告诉我内容都是None

 all(v is None for v in l) 

如果l所有元素都是None则返回True

请注意, l.count(None) == len(l)要快得多,但要求l是一个实际的list ,而不仅仅是一个迭代。

 not any(my_list) 

如果my_list所有项都是虚假的,则返回True

编辑 :由于匹配对象总是真实可信,而且None错误,所以对于手头的情况,这将得到与all(x is None for x in my_list)相同的结果。 正如gnibbler的回答所certificate的 ,使用any()都是更快的select。

由于Match对象永远不会评估为false,所以not any(L)

 $ python -m timeit -s"L=[None,None,None]" "all( v is None for v in L )" 100000 loops, best of 3: 1.52 usec per loop $ python -m timeit -s"L=[None,None,None]" "not any(L)" 1000000 loops, best of 3: 0.281 usec per loop $ python -m timeit -s"L=[None,1,None]" "all( v is None for v in L )" 100000 loops, best of 3: 1.81 usec per loop $ python -m timeit -s"L=[None,1,None]" "not any(L)" 1000000 loops, best of 3: 0.272 usec per loop 

或者有点奇怪,但是:

 a = [None, None, None] set(a) == set([None]) 

要么:

 if [x for x in a if x]: # non empty list #do something 

编辑:

 def is_empty(lVals): if not lVals: return True for x in lVals: if x: return False return True 
 is_all_none = lambda L: not len(filter(lambda e: not e is None, L)) is_all_none([None,None,'x']) False is_all_none([None,None,None]) True