Подтвердить что ты не робот

Как проверить, содержит ли список только None в python

l=[None,None]

есть ли функция, которая проверяет, содержит ли список l только None или нет?

4b9b3361

Ответ 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:

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

Ответ 5

Если вы хотите проверить, являются ли члены списка None, вы можете перебрать элементы и проверить, являются ли они None

Если вы хотите проверить, является ли список None, вы можете использовать тип (varlist), и он вернет None

вы можете сделать

if (lst == None): ... напечатать "да"

работы.