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

all() в Python: как проверить все элементы сразу

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

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

all() в Python: как проверить все элементы сразу
Фото: Rob and Stephanie Levy / CC BY 2.0, Wikimedia Commons
Содержание статьи
  1. Как работает all()
  2. Почему all() для пустой коллекции возвращает True
  3. Строки, кортежи, множества и словари
  4. Проверка условий через генератор
  5. Валидация данных формы
  6. Чем all() отличается от any()
  7. Частые вопросы
    1. Как проверить, что все элементы списка одинаковые?
    2. Как проверить, что все числа в списке положительные?
    3. Почему all() с генератором работает быстрее, чем со списком?
    4. Чем all() отличается от оператора and?

Как работает all()

Функция встроенная и принимает ровно один аргумент - итерируемый объект. Результат всегда True или False. Внутри происходит простой перебор: каждый элемент проверяется на истинность, и при первом ложном работа заканчивается.

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

Такой код ведет себя так же, как настоящая all(), только медленнее, потому что встроенная функция написана на C. Из этой схемы сразу видны два следствия: перебор останавливается досрочно, а пустая коллекция дает True.

print(all([1, 3, 4, 5]))     # True
print(all([1, 3, 4, 0]))     # False: 0 ложный
print(all([0, False]))       # False
print(all(['True', 'False']))  # True: обе строки непустые
print(all([[]]))             # False: единственный элемент - пустой список

Строки 'True' и 'False' истинны одинаково, поскольку функция смотрит не на текст, а на то, пустая ли строка. Список правил истинности для всех типов собран в статье о функции bool.

Почему all() для пустой коллекции возвращает True

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

print(all([]))    # True
print(all(''))    # True
print(all({}))    # True
print(all(set())) # True

На практике это источник багов. Например, проверка "все оценки положительные" пройдет для студента без оценок. Если пустой набор должен считаться ошибкой, добавьте явную проверку длины:

scores = []
ok = bool(scores) and all(s > 0 for s in scores)
print(ok)  # False

Строки, кортежи, множества и словари

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

Строка перебирается по символам. Каждый символ - непустая строка, поэтому для любой непустой строки ответ True, даже для '000'. Проверять содержимое строки нужно через методы: all(map(str.isalpha, 'Привет')) вернет True, если в строке только буквы.

Словарь отдает ключи, значения при этом не проверяются. Для проверки значений вызывают метод values().

d = {1: 0, 2: ''}
print(all(d))           # True: ключи 1 и 2 истинны
print(all(d.values()))  # False: значения 0 и '' ложны
print(all({0: 'x'}))    # False: ключ 0 ложный

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

Главная сила all() раскрывается в паре с выражением-генератором. Одна строка заменяет цикл с флагом и break.

temps = [21, 23, 19, 25]
print(all(18 <= t <= 26 for t in temps))  # True: все в норме

items = [1, 2, True]
print(all(isinstance(x, int) for x in items))  # True: bool - подкласс int

nums = [3, 5, 8, 12]
print(all(a <= b for a, b in zip(nums, nums[1:])))  # True: отсортирован

Последний пример проверяет сортировку без вызова sorted(): функция zip() составляет пары соседних элементов, и каждая пара сравнивается. С Python 3.10 то же самое короче пишется через itertools.pairwise(nums). Работа zip() подробно разобрана в статье zip и map в Python.

Пример с isinstance показывает ловушку: True проходит проверку на int, потому что тип bool наследуется от int. Если логические значения нужно отсеять, добавьте условие not isinstance(x, bool).

Валидация данных формы

Типичное применение - проверить, что пользователь заполнил все обязательные поля. Здесь удобно перебирать список имен полей, а не все значения словаря: необязательные поля могут оставаться пустыми.

form = {'name': 'Аня', 'email': 'a@mail.ru', 'phone': ''}
required = ('name', 'email')

if all(form.get(field, '').strip() for field in required):
    print('Форма заполнена')
else:
    missing = [f for f in required if not form.get(f, '').strip()]
    print('Не заполнены:', missing)

Метод strip() отсекает строки из одних пробелов, а get() с пустой строкой по умолчанию защищает от KeyError, если поля нет в словаре совсем.

Чем all() отличается от any()

Обе функции перебирают коллекцию и останавливаются досрочно, но ищут противоположное. all() останавливается на первом ложном элементе, any() на первом истинном.

Ситуацияall()any()
все элементы истинныTrueTrue
часть истинна, часть ложнаFalseTrue
все элементы ложныFalseFalse
коллекция пустаяTrueFalse

Функции связаны законами де Моргана: all(x) равно not any(not e for e in x). Подробно вторая функция описана в статье про any() в Python.

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

Ответы на вопросы, которые чаще всего возникают при работе с all().

Как проверить, что все элементы списка одинаковые?

Сравните каждый элемент с первым: all(x == lst[0] for x in lst). Для хешируемых значений короче вариант len(set(lst)) <= 1, он также вернет True для пустого списка.

Как проверить, что все числа в списке положительные?

Передайте в функцию генератор с условием: all(x > 0 for x in numbers). Если список может быть пустым и это недопустимо, добавьте проверку numbers and ....

Почему all() с генератором работает быстрее, чем со списком?

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

Чем all() отличается от оператора and?

Оператор and соединяет заранее известное число выражений и возвращает один из операндов, а не обязательно bool. all() принимает коллекцию любой длины и всегда возвращает True или False.