Функция all странный результат

Рейтинг: 0Ответов: 2Опубликовано: 16.07.2023

Почему результат функции all с аргументом пустой список []True?

print(all([]))

Хотя если bool([]) или if []False логично

Ответы

▲ 2

Это из-за алгебры. Понятно как определить all для непустых списков. Если в списке все элементы истинны, значение all - True. Обратите внимание что all обладает следующим свойством: all(a + b) = all(a) and all(b), где a и b списки, а + это конкатенация. Но тогда верно что

all(a) = all(a + []) = all(a) and all([])

Последнее равенство может быть верным только если all([]) - истина. Поэтому естественно приписать пустому списку истину.

Что касается bool([]) == False, то это просто специальное правило языка. Будь моя воля, я бы вовсе не приводил списки к логическим значениям. Вместо bool(a) можно было бы проверять len(a) == 0. Но так решил автор языка.

▲ 1

all - эквивалент False not in a:

def all(a: list[bool]) -> bool:
    return False not in a