Сообщить об ошибке.

Функция all() в Python, все элементы True

Проверяет, что все элементы в последовательности True

Синтаксис:

all(iterable)

Параметры:

Возвращаемое значение:

Описание:

Функция all() возвращает значение True , если все элементы в итерируемом объекте - истинны, в противном случае она возвращает значение False.

Если передаваемая последовательность пуста, то функция all() также возвращает True.

Функция all() применяется для проверки на True ВСЕХ значений в последовательности и эквивалентна следующему коду:

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

Дополнительно смотрите встроенную функцию any()

В основном функция all() применяется в сочетании с оператором ветвления программы if ... else. Работу функции all() можно сравнить с оператором and в Python, только all() работает с последовательностями:

>>> True and True and True
# True
>>> True and False and True
# False

>>> all([True, True, True])
# True
>>> all([True, False, True])
# False

Но между and и all() в Python есть два основных различия:

  • Синтаксис.
  • Возвращаемое значение.

Функция all() всегда возвращает False или True (значение bool)

>>> all([3, 1, 2, 6])
# True
>>> all([3, 0, 2, []])
# False

Оператор and , возвращает ПОСЛЕДНЕЕ истинное значение, при условии, что в выражении все значения True а если в выражении присутствует значение False (ложное значение), то ПЕРВОЕ ложное значение. Что бы добиться поведения как у функции all(), необходимо выражение с оператором and обернуть в функцию bool().

>>> 3 and 1 and 2 and 6
# 6
>>> 3 and 0 and 3 and []
# 0

>>> bool(3 and 1 and 2 and 6)
# True
>>> bool(3 and 0 and 3 and [])
# False

Из всего сказанного можно сделать вывод, что для успешного использования функции all() необходимо в нее передавать последовательность, полученную в результате каких то вычислений/сравнений, элементы которого будут оцениваться как 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]

# использование оператора идентичности `is`
>>> [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]

Примеры проводимых проверок функцией all().

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

>>> num1 = range(1, 9)
>>> num2 = range(-1, 7)
>>> all([x > 0 for x in num1])
# True
>>> all([x > 0 for x in num2])
# False

Или проверить, что последовательность чисел содержит только ЦЕЛЫЕ числа.

>>> num1 = [1, 2, 3, 4, 5, 6, 7]
>>> num2 = [1, 2.0, 3.1, 4, 5, 6, 7.9]
>>> all([type(x) is int for x in num1])
# True
>>> all([type(x) is int for x in num2])
# False

Или есть строка с числами, записанными через запятую и нам необходимо убедится, что в строке действительно записаны только цифры. Для этого, сначала надо разбить строку на список строк по разделителю ',' и проверить каждый элемент полученного списка на десятичное число методом str.isdigit(). Что бы учесть правила записи десятичных чисел будем убирать точку перед проверкой строки на десятичное число.

>>> line1 = "1, 2, 3, 9.9, 15.1, 7"
>>> line2 = "1, 2, 3, 9.9, 15.1, 7, девять"
>>> all([x.replace('.', '').strip().isdigit() for x in line1.split(',')])
# True
>>> all([x.replace('.', '').strip().isdigit() for x in line2.split(',')])
# False

Еще пример со строкой. Допустим нам необходимо узнать, есть ли в строке наличие открытой И закрытой скобки?

>>> simbols = ['(', ')']
>>> line1 = "функция 'all()' всегда возвращает 'False' или 'True'"
>>> line2 = "функция any всегда возвращает значение bool"
>>> all([x in line1 for x in simbols])
# True
>>> all([x in line2 for x in simbols])
# False