l=[None,None]
есть ли функция, которая проверяет, содержит ли список l только None или нет?
l=[None,None]
есть ли функция, которая проверяет, содержит ли список l только None или нет?
Если вы имеете в виду, чтобы проверить, содержит ли список l
только None,
if all(x is None for x in l):
...
L == [None] * len(L)
намного быстрее, чем использование all(), когда L - все None
$ 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
Попробуйте any()
- он проверяет, есть ли в списке один элемент, который считается True
в булевом контексте. None
оценивается как False
в булевом контексте, поэтому any(l)
становится False
.
Обратите внимание, что для проверки, действительно ли список (а не его содержимое) None
, должен использоваться if l is None
. И if not l
, чтобы проверить, является ли он ни None (или что-либо еще, что считается False
), либо пустым.
Я лично предпочитаю делать 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
Если вы хотите проверить, являются ли члены списка None, вы можете перебрать элементы и проверить, являются ли они None
Если вы хотите проверить, является ли список None, вы можете использовать тип (varlist), и он вернет None
вы можете сделать
if (lst == None): ... напечатать "да"
работы.