Данная статья посвящена встроенным функциям Python any() и all(). Их можно использовать, чтобы проверить на истинность каждый элемент в итерируемом типе и на основе возвращённого значения реализовывать дальнейшую логику.
Функция All()
Функция all() возвращает True, если все элементы в итерируемом типе являются истинными. Рассмотрим следующий пример:
item_list = [True, True, True, True]
print (all(item_list))
При вызове функции all() в качестве аргумента в неё передаётся итерируемый объект item_list. После выполнения кода выше вы получите следующий результат:
True
В данном случае функция all() вернула значение True, так как все элементы в итерируемом объекте равны True.
Любые непустые строки всегда рассматриваются как True.
item_list = ["mango", "banana", "apple", "orange"]
print (all(item_list))
Код вернёт следующий результат:
True
Если список совершенно пуст, all() всегда будет возвращать True.
item_list = []
print (all(item_list))
Получаем:
True
Если некоторые элементы итерируемого объекта – пустые строки, при вызове all() они считаются False:
item_list = ["mango", "banana", "apple", ""]
print (all(item_list))
При запуске данного фрагмента кода вы получите следующий результат:
False
Так как последний элемент (пустая строка) в item_list был False, функция all() вернула значение False.
Если элемент равен 0 (тип int, пишется без кавычек), функция all() расценит его как False:
item_list = ["mango", "banana", "apple", 0]
print (all(item_list))
Результат:
False
И, наконец, если элемент просто равен False (булево значение), all() вернёт False:
item_list = ["mango", "banana", "apple", False]
print (all(item_list))
Результат:
False
То есть, если передать в функцию all() не пустой итерируемый объект, она всегда будет возвращать True, если в объекте не окажется следующих трех значений:
- «» (пустая строка)
- 0 (без кавычек, тип int)
- False (без кавычек, тип boolean)
Иногда вам может понадобиться преобразовать каждое значение итерируемого типа в True или False на основании определённых условий и затем вызвать для результата функцию all(). В этом случае вы можете использовать синтаксис списковых включений, чтобы напрямую передавать значения True или False в функцию:
item_list = [1, 2, 3, 4, 5, 6]
print (all(item > 2 for item in item_list))
В функции print() синтаксис списковых включений используется там, где цикл for пробегает по элементам item_list. Каждый элемент в item_list сравнивается с 2, и, если он больше, он становится True, в противном случае — False. Затем функция all() проверяет на истинность каждый элемент.
False
Вы можете проверить результат, добавив ещё один print():
item_list = [1, 2, 3, 4, 5, 6]
print (all(item > 2 for item in item_list))
print ([item > 2 for item in item_list])
Данный код выведет следующий результат:
False
[False, False, True, True, True, True]
Не все значения здесь истинны, поэтому функция all() вернёт False.
Функция any()
Функция any() возвращает значение True, если хотя бы один элемент во всём итерируемом типе истинный. Например:
item_list = [True, True, True, False]
print (any(item_list))
Функция any() вызывается с аргументом итерируемого типа item_list. После запуска приведенного выше кода получим:
True
Здесь функция any() вернула True, так как по крайней мере один элемент в списке равен True.
Непустые строковые значения также всегда являются истинными.
item_list = ["mango", False]
print (any(item_list))
Результат:
True
Если список полностью пуст, any() всегда будет возвращать False:
item_list = []
print (any(item_list))
Код выведет:
False
Если в итерируемом объекте содержатся пустые строки, при вызове any() их значение расценивается как False.
item_list = ["", ""]
print (any(item_list))
Так как обе пустые строки считаются False, вы получите следующий результат:
False
В any() элемент со значением 0 также будет считаться False:
item_list = [0, 0]
print (any(item_list))
Результат:
False
Синтаксис списковых включений, использовавшийся в функции all() выше, так же применим и к any(). Разберем его еще раз.
Для передачи напрямую в функцию any() значения True/False, используем синтаксис списковых включений:
item_list = [1, 2, 3, 4, 5, 6]
print (any(item > 2 for item in item_list))
В функции print() этот синтаксис применяется в момент, когда цикл for проходится по item_list. Каждое число в item_list сравнивается с 2: больше 2 — True, иначе — False. Затем функция any() проверяет истинность каждого элемента. После запуска данного кода вы получите следующий результат:
True
Вы можете также проверить его, используя дополнительный print():
item_list = [1, 2, 3, 4, 5, 6]
print (any(item > 2 for item in item_list))
print ([item > 2 for item in item_list])
Результат:
True
[False, False, True, True, True, True]
Наличие хотя бы одного «истинного» элемента приводит к тому, что any() возвращает True.
Заключение
В Python есть разнообразные способы применения функций any() и all(). Конечно, вы можете легко реализовать подобные функции самостоятельно, но ведь есть уже готовые! Вообще, в Python можно найти множество таких маленьких вспомогательных функций, позволяющих избегать многословности и выполнять максимум работы при минимуме строк кода.