all(iterable)
True
или False
.Функция 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