- Функция any() в Python
- Параметры
- Значение, возвращаемое функцией any()
- Пример 1: Использование в списках
- Пример 2: Применение в строках
- Пример 3: Использование any() со словарями
- Функции all() и any() в Python
- С логическим значением
- С пустой итерацией
- Со списком строк
- С настраиваемыми объектами
- Функция any()
- С логическим значением
- С пустой итерацией
- Со списком строк
- С настраиваемыми объектами
- Как использовать функции all() и any() в Python
- Функция All()
- Функция any()
- Заключение
Функция any() в Python
Функция any() возвращает True, если какой-либо элемент итерации имеет значение True. Если нет, она возвращает False.
Параметры
Функция any() принимает в Python итерацию (список, строку, словарь и т. д.).
Значение, возвращаемое функцией any()
- Истинно, если хотя бы один элемент итерации истинен;
- False, если все элементы ложны или итерация пуста.
Пример 1: Использование в списках
# True since 1,3 and 4 (at least one) is true l = [1, 3, 4, 0] print(any(l)) # False since both are False l = [0, False] print(any(l)) # True since 5 is true l = [0, False, 5] print(any(l)) # False since iterable is empty l = [] print(any(l))
Метод any() работает аналогичным образом для кортежей и наборов, подобных спискам.
Пример 2: Применение в строках
# Atleast one (in fact all) elements are True s = "This is good" print(any(s)) # 0 is False # '0' is True since its a string character s = '000' print(any(s)) # False since empty iterable s = '' print(any(s))
Пример 3: Использование any() со словарями
В случае словарей, если все ключи (не значения) ложны или словарь пуст, any() возвращает False. Если хотя бы один ключ верен, any() возвращает True.
# 0 is False d = print(any(d)) # 1 is True d = print(any(d)) # 0 and False are false d = print(any(d)) # iterable is empty d = <> print(any(d)) # 0 is False # '0' is True d = print(any(d))
False True False False True
Функции all() и any() в Python
Функция all() в Python – одна из встроенных функций. Она принимает итерацию в качестве аргумента и возвращает True, если все элементы итерации истинны или пусты.
Служебный метод и ярлык для функции ниже.
def all(iterable): for element in iterable: if not element: return False return True
Давайте посмотрим на некоторые примеры функции all().
С логическим значением
# iterable has all True list_bools = [True, True, True] print(all(list_bools)) # iterable all elements are not True list_bools = [True, True, False] print(all(list_bools))
С пустой итерацией
# iterable is empty list_bools = [] print(all(list_bools))
Со списком строк
# iterable elements are True string list_strs = ['True', 'True'] print(all(list_strs)) # iterable all elements are true string with different case list_strs = ['True', 'true'] print(all(list_strs)) # iterable all elements are not true string list_strs = ['abc', 'true'] print(all(list_strs)) # iterable all elements are empty string list_strs = ['', 'true'] print(all(list_strs))
Когда нам нужно логическое значение объекта, python ищет в объекте функцию bool.
Если функция __bool__ не определена, то вызывается функция len(), если она определена. Логическое значение объекта считается true, если вывод len() не равен нулю.
Если класс не определяет ни функций __len __(), ни __bool __(), все его экземпляры считаются true.
С настраиваемыми объектами
Давайте проверим приведенное выше объяснение с помощью специального класса. Мы создадим собственный класс Person, будем использовать его объекты в списке и вызывать для него функцию all().
class Person: name = "" def __init__(self, n): self.name = n list_objs = [Person("Pankaj"), Person("Lisa")] print(all(list_objs)) list_objs = [Person("A"), Person("David")] print(all(list_objs))
Поскольку для нашего объекта не определены функции __len __() и __bool __(), его логическое значение равно True.
Давайте продолжим и определим функцию __len __() для класса Person, как показано ниже.
def __len__(self): print('len function called') return len(self.name)
Теперь вывод более ранних фрагментов кода будет следующим:
len function called len function called True len function called len function called True
Обратите внимание, что функция len() вызывается для каждого объекта, когда all() используется со списком объектов Person.
Теперь давайте определим функцию __bool__ для класса Person и посмотрим, что происходит с приведенным выше кодом.
def __bool__(self): print('bool function called') if len(self.name) > 3: return True else: return False
bool function called bool function called True bool function called False
Из вывода ясно, что если функция __bool__ определена, то она используется для получения логического значения объекта python. Обратите внимание, что вывод функции all() второго списка имеет значение False, потому что длина A меньше 3.
Функция any()
Функция any() в Python является одной из встроенных функций. Она принимает итерацию в качестве аргумента и возвращает True, если какой-либо элемент в итерации имеет значение True. Если итерабельность пуста, возвращается False.
Служебный метод и ярлык для функции ниже.
def any(iterable): for element in iterable: if element: return True return False
Давайте посмотрим на некоторые примеры функции any().
С логическим значением
# iterable has at least one True list_bools = [True, True, True] print(any(list_bools)) # iterable none of the elements are True list_bools = [False, False] print(any(list_bools))
С пустой итерацией
# iterable is empty list_bools = [] print(any(list_bools)) # False
Со списком строк
# iterable elements are True string (at least one) list_strs = ['True', 'false'] print(any(list_strs)) # iterable any elements is true string with different case list_strs = ['fff', 'true'] print(any(list_strs)) # iterable any elements are not true string list_strs = ['abc', 'def'] print(any(list_strs)) # iterable all elements are empty string list_strs = ['', ''] print(any(list_strs))
Когда нам нужно логическое значение объекта, python ищет в объекте функцию __bool__.
Если функция __bool__ не определена, то вызывается функция len(), если она определена. Логическое значение объекта считается true, если вывод len() не равен нулю.
Если класс не определяет ни функций __len __(), ни __bool __(), все его экземпляры считаются true.
С настраиваемыми объектами
Давайте создадим собственный класс Employee, будем использовать его объекты в списке и вызывать для него функцию any().
class Employee: name = "" def __init__(self, n): self.name = n list_objs = [Employee("Pankaj"), Employee("Lisa")] print(any(list_objs)) list_objs = [Employee("A"), Employee("D")] print(any(list_objs))
Поскольку в нашем классе Employee не определены функции __len __() и __bool __(), его логическое значение равно True.
Давайте продолжим и определим функцию __len __() для класса Employee, как показано ниже.
def __len__(self): print('len function called') return len(self.name)
Теперь вывод более ранних фрагментов кода будет следующим:
len function called True len function called True
Обратите внимание, что функция len() вызывается, когда any() используется со списком объектов Employee. Поскольку первый объект в итерируемом возврате вернул True, другие элементы не требуется оценивать для логического значения.
Теперь давайте определим функцию __bool__ для класса Employee и посмотрим, что происходит с приведенным выше кодом.
def __bool__(self): print('bool function called') if len(self.name) > 3: return True else: return False
bool function called True bool function called bool function called False
Из вывода ясно, что если функция __bool__ определена, то она используется для получения логического значения объекта python.
Обратите внимание, что вывод функции any() второго списка имеет значение False, и для всех объектов в списке извлекается логическое значение.
Как использовать функции all() и any() в Python
Данная статья посвящена встроенным функциям Python any() и all() . Их можно использовать, чтобы проверить на истинность каждый элемент в итерируемом типе и на основе возвращённого значения реализовывать дальнейшую логику.
Функция All()
Функция all() возвращает True, если все элементы в итерируемом типе являются истинными. Рассмотрим следующий пример:
item_list = [True, True, True, True] print (all(item_list))
При вызове функции all() в качестве аргумента в неё передаётся итерируемый объект item_list . После выполнения кода выше вы получите следующий результат:
В данном случае функция all() вернула значение True, так как все элементы в итерируемом объекте равны True.
Любые непустые строки всегда рассматриваются как True.
item_list = ["mango", "banana", "apple", "orange"] print (all(item_list))
Код вернёт следующий результат:
Если список совершенно пуст, all() всегда будет возвращать True.
item_list = [] print (all(item_list))
Если некоторые элементы итерируемого объекта – пустые строки, при вызове all() они считаются False:
item_list = ["mango", "banana", "apple", ""] print (all(item_list))
При запуске данного фрагмента кода вы получите следующий результат:
Так как последний элемент (пустая строка) в item_list был False, функция all() вернула значение False.
Если элемент равен 0 (тип int , пишется без кавычек), функция all() расценит его как False:
item_list = ["mango", "banana", "apple", 0] print (all(item_list))
И, наконец, если элемент просто равен False (булево значение), all() вернёт False:
item_list = ["mango", "banana", "apple", False] print (all(item_list))
То есть, если передать в функцию all() не пустой итерируемый объект, она всегда будет возвращать True , если в объекте не окажется следующих трех значений:
Иногда вам может понадобиться преобразовать каждое значение итерируемого типа в 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() проверяет на истинность каждый элемент.
Вы можете проверить результат, добавив ещё один 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 . После запуска приведенного выше кода получим:
Здесь функция any() вернула True, так как по крайней мере один элемент в списке равен True.
Непустые строковые значения также всегда являются истинными.
item_list = ["mango", False] print (any(item_list))
Если список полностью пуст, any() всегда будет возвращать False:
item_list = [] print (any(item_list))
Если в итерируемом объекте содержатся пустые строки, при вызове any() их значение расценивается как False.
item_list = ["", ""] print (any(item_list))
Так как обе пустые строки считаются False, вы получите следующий результат:
В any() элемент со значением 0 также будет считаться False:
item_list = [0, 0] print (any(item_list))
Синтаксис списковых включений, использовавшийся в функции 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() проверяет истинность каждого элемента. После запуска данного кода вы получите следующий результат:
Вы можете также проверить его, используя дополнительный 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 можно найти множество таких маленьких вспомогательных функций, позволяющих избегать многословности и выполнять максимум работы при минимуме строк кода.