Данная статья посвящена встроенным функциям 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 можно найти множество таких маленьких вспомогательных функций, позволяющих избегать многословности и выполнять максимум работы при минимуме строк кода.