l=[None,None]
есть функция, которая проверяет, содержит ли список l только None или нет?Как проверить, содержит ли список только None в python
l=[None,None]
есть функция, которая проверяет, содержит ли список l только None или нет?Как проверить, содержит ли список только None в python
Если вы имеете в виду, чтобы проверить, если список l
содержит только None,
if all(x is None for x in l):
...
"... содержит только None" ИЛИ пусто. – Constantin
@system: Почему бы и нет? – kennytm
@systempuntoout, это фактически выражение генератора. – Constantin
Попробуйте any()
- он проверяет, существует ли в списке один элемент, который считается True
в булевом контексте. None
оценивает по False
в булевом контексте, поэтому any(l)
становится False
.
Обратите внимание, что для проверки действительно ли списка (а не его содержимого) None
, if l is None
. И if not l
, чтобы проверить, является ли он ни None (или что-либо еще, что считается False
), либо пустым.
>>> any ([None, None, 0]) даст False –
Как я получил это далеко, не услышав 'any()'? Удивительно. – otocan
L == [None] * len(L)
гораздо быстрее, чем при использовании всех(), когда L не все откл
$ 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
Если вы хотите проверить, нет ли членов списка None, то вы можете перебрать элементы и проверить, являются ли они None
Если вы хотите проверить, если список сам по себе не является None, вы можете использовать тип (список переменных), и он будет возвращать None
вы можете сделать
если (LST == None): ... печать «да»
работ.
Я лично предпочитаю делать 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
благодаря @JohnLaRooy для эталонного кода –
Что если он вернется для пустого списка '[]'? – Constantin
Возможный дубликат [Как проверить, нет ли всех элементов в списке?] (Http://stackoverflow.com/questions/6518394/how-to-check-if-all-items-in-the-list-are -нон) –
Возможный дубликат [Самый краткий способ проверить, пуст ли список или \ [Нет \]?] (http://stackoverflow.com/questions/1270920/most-concise-way-to-check-whether -a-list-is-empty-or-none) – ThiefMaster