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

2024-05-11 18:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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实例。 我可以对返回的列表执行哪一行检查来告诉我内容都是None


Tags: lambdainnonemap列表objectmatchout
3条回答
all(v is None for v in l)

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

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

not any(my_list)

如果my_list的所有项都是错误的,则返回True

编辑:由于match对象总是严格的,并且None是错误的,因此这将给出与手头案例的all(x is None for x in my_list)相同的结果。如gnibbler's answer所示,使用any()是迄今为止更快的替代方法。

因为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

相关问题 更多 >