Функция all странный результат
Почему результат функции all с аргументом пустой список [] — True?
print(all([]))
Хотя если bool([]) или if [] — False логично
Почему результат функции all с аргументом пустой список [] — True?
print(all([]))
Хотя если bool([]) или if [] — False логично
Это из-за алгебры. Понятно как определить 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. Но так решил автор языка.
all - эквивалент False not in a:
def all(a: list[bool]) -> bool:
return False not in a