Как использовать функции all() и any() в Python

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

Прокрутить вверх