Python: уроки, справочник и задачи

any() в Python: синтаксис, примеры и подводные камни

Раздел: Функции Python · Обновлено 31.10.2026

Функция any() в Python возвращает True, если среди элементов итерируемого объекта есть хотя бы один истинный, и False в остальных случаях. Ниже разобраны правила истинности, поведение со строками и словарями, проверка условий через генератор, досрочная остановка и типичные ошибки.

any() в Python: синтаксис, примеры и подводные камни
Фото: Ka23 13 / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Синтаксис и результат
  2. Что Python считает истинным
  3. any() со строками и словарями
  4. Проверка условия через генератор
  5. Досрочная остановка перебора
  6. any() и альтернативы
  7. Частые вопросы
    1. Почему any([]) возвращает False?
    2. Можно ли передать в any() несколько аргументов?
    3. Как проверить, что в строке есть заглавная буква?
    4. Работает ли any() с массивами NumPy?

Синтаксис и результат

Функция встроенная, импортировать ничего не нужно. Она принимает один аргумент - любой итерируемый объект: список, кортеж, множество, строку, словарь, генератор или файл.

any(iterable)

Возвращаемое значение всегда типа bool, даже если элементы были числами или строками. Вот как результат зависит от содержимого:

ЭлементыПримерany()
все истинные[1, 'a', [0]]True
хотя бы один истинный[0, '', 7]True
все ложные[0, '', None, []]False
пустая коллекция[]False

По логике работы any() эквивалентна такому циклу. Его полезно запомнить, чтобы понимать все остальные примеры:

def my_any(iterable):
    for element in iterable:
        if element:
            return True
    return False

Что Python считает истинным

Функция не сравнивает элементы с True, она проверяет их истинность так же, как оператор if. Ложными считаются False, None, ноль любого числового типа (0, 0.0, 0j) и пустые коллекции: '', [], (), {}, set(). Все остальное истинно. Подробно правила описаны в статье про функцию bool.

print(any([0, False]))         # False
print(any([0, False, 5]))      # True
print(any(['False', 'False'])) # True: непустые строки
print(any([[], {}, '']))       # False: все коллекции пустые

Третья строка часто сбивает с толку. Строка 'False' состоит из пяти символов, поэтому она истинна, а слово внутри ничего не значит. Если данные пришли из файла или формы в виде текста, их нужно сначала преобразовать.

any() со строками и словарями

При переборе строки получаются отдельные символы. Любой символ, включая пробел и цифру 0, - это непустая строка длины 1, поэтому any() вернет False только для пустой строки.

print(any('000'))  # True: символ '0' истинен
print(any(' '))    # True: пробел тоже
print(any(''))     # False

print(any(map(str.isdigit, 'abc1')))  # True: есть цифра

Последняя строка показывает практичное применение: map() применяет метод str.isdigit к каждому символу, а any() отвечает, нашлась ли цифра. Так проверяют пароль или логин на наличие символов нужного вида.

Словарь при переборе отдает ключи, поэтому any() проверяет именно их, значения не учитываются.

print(any({0: 'да', '': 'нет'}))  # False: оба ключа ложные
print(any({0: 'да', 1: 'нет'}))   # True: ключ 1 истинен
print(any({'0': 0}))              # True: ключ - непустая строка
print(any({0: 1}.values()))       # True: проверяем значения

Проверка условия через генератор

Чаще всего в any() передают не готовый список, а выражение-генератор с условием. Код читается почти как обычная фраза: есть ли хоть один элемент, для которого выполняется условие.

ages = [12, 15, 21]
print(any(age >= 18 for age in ages))  # True

files = ['report.pdf', 'photo.jpg', 'notes.txt']
print(any(f.endswith('.exe') for f in files))  # False

stop_words = ['спам', 'казино']
text = 'Бесплатное казино без регистрации'
print(any(w in text.lower() for w in stop_words))  # True

Скобки генератора можно не писать, когда он единственный аргумент функции. Синтаксис таких выражений разобран в статье о генераторах Python.

Досрочная остановка перебора

Функция прекращает работу на первом истинном элементе и дальше коллекцию не смотрит. С генератором это экономит вычисления, а со списковым включением экономии нет: список строится целиком еще до вызова any().

def check(x):
    print('проверка', x)
    return x > 2

any(check(x) for x in [1, 3, 5])
# проверка 1
# проверка 3

any([check(x) for x in [1, 3, 5]])
# проверка 1
# проверка 3
# проверка 5

Разница заметна, когда проверка дорогая: запрос к сети, чтение файла, тяжелое вычисление. Благодаря ленивой работе any() подходит и для бесконечных итераторов, если истинный элемент в них гарантированно встретится.

any() и альтернативы

Для некоторых задач есть более прямые инструменты. Выбор зависит от того, что именно нужно узнать.

Сочетание not any(...) означает, что ни один элемент не подходит. Оно равносильно all(not x for x in ...), но читается проще. Описание функции есть в официальной документации.

Частые вопросы

Короткие ответы на вопросы, которые возникают при использовании any().

Почему any([]) возвращает False?

Функция ищет хотя бы один истинный элемент. В пустой коллекции элементов нет, значит, и истинного не найдено. Это зеркальное поведение к all([]), которая возвращает True.

Можно ли передать в any() несколько аргументов?

Нет, вызов any(a, b) завершится ошибкой TypeError. Значения нужно обернуть в коллекцию: any([a, b]) или any((a, b)).

Как проверить, что в строке есть заглавная буква?

Используйте генератор с методом строки: any(ch.isupper() for ch in s). По той же схеме проверяют цифры через isdigit() и пробелы через isspace().

Работает ли any() с массивами NumPy?

Встроенная any() работает с одномерным массивом, но для многомерного выбросит ValueError. Для массивов NumPy используйте метод arr.any() или функцию np.any(), они работают быстрее и понимают параметр axis.