In [27]: map( lambda f,p: f.match(p), list(patterns.itervalues()), vatids )
Out[27]: [None, <_sre.SRE_Match object at 0xb73bfdb0>, None]
Run Code Online (Sandbox Code Playgroud)
列表可以是全部None
或其中一个是re.Match实例.我可以在返回的列表上做什么内衬检查,告诉我内容全部None
?
Dan*_* D. 140
all(v is None for v in l)
Run Code Online (Sandbox Code Playgroud)
将返回True
如果所有的元素l
都None
请注意,l.count(None) == len(l)
速度要快得多,但要求它l
是实际的list
而不仅仅是可迭代的.
Sve*_*ach 38
not any(my_list)
Run Code Online (Sandbox Code Playgroud)
返回True
如果所有项目my_list
都falsy.
编辑:由于匹配对象始终是真实的并且None
是假的,这将产生与all(x is None for x in my_list)
手头的情况相同的结果.正如gnibbler的回答所示,使用any()
是迄今为止更快的替代方案.
Joh*_*ooy 11
由于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
Run Code Online (Sandbox Code Playgroud)
还是有点怪,但是:
a = [None, None, None]
set(a) == set([None])
Run Code Online (Sandbox Code Playgroud)
要么:
if [x for x in a if x]: # non empty list
#do something
Run Code Online (Sandbox Code Playgroud)
编辑:
def is_empty(lVals):
if not lVals:
return True
for x in lVals:
if x:
return False
return True
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54181 次 |
最近记录: |