Ответ 1
all(v is None for v in l)
вернет True
, если все элементы l
равны None
Обратите внимание, что l.count(None) == len(l)
выполняется намного быстрее, но требует, чтобы l
был фактическим list
, а не только итерируемым.
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
?
all(v is None for v in l)
вернет True
, если все элементы l
равны None
Обратите внимание, что l.count(None) == len(l)
выполняется намного быстрее, но требует, чтобы l
был фактическим list
, а не только итерируемым.
not any(my_list)
возвращает True
, если все элементы my_list
являются ложными.
Изменить. Поскольку объекты соответствия всегда правдоподобны, а None
является ложным, это даст тот же результат, что и all(x is None for x in my_list)
для рассматриваемого случая. Как показано в ответе gnibbler, использование 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
Или немного странно, но:
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