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