Проверить, что все элементы списка соответствуют условию
Допустим есть список N - длинны элементов, как проверить, что все его элементы больше нуля. И если это так, то вывести из функции булевое значение равное True. Пробовал через разные циклы реализовать (В частотности через for … in …:), так и ничего не вышло.
Пробовал что-то типа такого кода:
for pangram in pangrams:
if pangram != 0:
pass
Ответы (5 шт):
def f(list_):
return len(list(filter(lambda x: x > 0, list_))) == len(list_)
с помощью filter оставляем только те элементы которые больше нулю, превращаем в список, сравниваем длину получившегося списка и начального
либо так:
def f(list_):
return min(list_) >= 0
воспользоваться стандартной функцией all:
arr = [1, 2, -3]
res = all(map(lambda x: x > 0, arr))
чуть более короткий вариант с использованием того же подхода:
res = all([x > 0 for x in arr])
совет от CrazyElf делает код еще короче:
res = all(x > 0 for x in arr)
P.S.
немного изврата с использованием стандартных функций:
res = len(list(filter(lambda x: x <= 0, arr))) == 0
или тоже самое, но чуть короче:
res = list(filter(lambda x: x <= 0, arr)) == []
Добавлю функционального изврату )
from operator import lt
from functools import partial
print(all(map(partial(lt, 0), [1, 2, 3, -1])))
print(all(map(partial(lt, 0), [1, 2, 3, 4])))
print(all(map(partial(lt, 0), [1, 2, 0, 4])))
Вывод:
False
True
False
Хотя тут получается как бы наоборот - проверяется, что 0 меньше каждого из элементов списка.
Как альтернатива:
not any(x<=0 for x in [1, 2, 5, 4, 0]) # False
not any(x<=0 for x in [1, 2, 5, 4, 7]) # True
Функция, эквивалентная конструкции all(x > 0 for x in arr):
def all_positive(pangrams):
for pangram in pangrams:
if pangram <= 0:
# Если встретился элемент не больше нуля, сразу выходим из функции и возвращаем False
return False
# Если дошли до сюда, значит все элементы больше нуля (или список пустой),
# возвращаем True
return True