any(iterable)
True
или False
.Функция any()
возвращает True
, если какой-либо (любой) элемент в итерируемом объекте является истинным True
, в противном случае any()
возвращает значение False
.
Если последовательность пуста, то функция any()
возвращает False
.
Функция any()
применяется для проверки истинности ЛЮБОГО из значений в итерируемом объекте и эквивалентна следующему коду:
def any(iterable): for element in iterable: if element: return True return False
Дополнительно смотрите встроенную функцию all()
.
В основном функция any()
применяется в сочетании с оператором ветвления программы if ... else
. Работу функции any()
можно сравнить с оператором or
в Python, только any()
работает с последовательностями:
>>> False or True or False # True >>> any([False, True, False]) # True
Но между or
и any()
в Python есть два основных различия:
Функция any()
всегда возвращает False
или True
.
>>> any([0, 2, 1, 0, 0]) # True >>> any([0, 0, '']) # False
Оператор or
возвращает ПЕРВОЕ истинное значение, а если все значения False
, то ПОСЛЕДНЕЕ ложное значение.
>>> 0 or 2 or 1 or 0 or 0 # 2 >>> 0 or 0 or '' # '' >>> bool(0 or 2 or 1 or 0 or 0) # True >>> bool(0 or 0 or '') # False
Из всего сказанного можно сделать вывод, что для успешного использования функции any()
необходимо в нее передавать последовательность, полученную в результате каких то вычислений/сравнений, элементы которого будут оцениваться как True
или False
. Это можно достичь применяя функцию map()
или выражения-генераторы списков, используя в них встроенные функции языка, возвращающие bool
значения, операции сравнения, оператор вхождения in
и оператор идентичности is
.
num = [1, 2.0, 3.1, 4, 5, 6, 7.9] # использование встроенных функций # на примере 'isdigit()' >>> [str(x).isdigit() for x in num] # [True, False, False, True, True, True, False] # использование операции сравнения >>> [x > 4 for x in num] # [False, False, False, False, True, True, True] # использование оператора вхождения `in` >>> ['.' in str(x) for x in num] # [False, True, True, False, False, False, True] # использование оператора идентичности `in` >>> [type(x) is int for x in num] # [True, False, False, True, True, True, False] # использование функции map() >>> list(map(lambda x: x > 1, num)) [False, True, True, True, True, True, True]
any()
.Допустим у нас есть строка например с адресом и нам необходимо узнать, содержит ли адрес номер дома. Для этого разделим строку с адресом справа на лево методом str.rsplit()
по разделителю ' '
один раз.
>>> addr1 = '142100, г. Москва, ул. Свердлова, 15' >>> addr2 = '142100, г. Москва, ул. Свердлова' >>> any(map(str.isdigit, addr1.rsplit(' ',1))) # True >>> any(map(str.isdigit, addr2.rsplit(' ',1))) # False
Второй пример с числовой последовательностью. Необходимо узнать, есть ли в последовательности числа больше определенного значения.
>>> num1 = range(0, 20, 2) >>> num2 = range(0, 15, 2) >>> any([x > 15 for x in num1]) # True >>> any([x > 15 for x in num2]) # False
Также можно проверять строку на наличие, каких то определенных символов.
>>> simbols = ['(', ')', '\''] >>> line1 = "функция 'any()' всегда возвращает 'False' или 'True'" >>> line2 = "функция any всегда возвращает значение bool" >>> any([x in line1 for x in simbols]) # True >>> any([x in line2 for x in simbols]) # False