Вы неправильно понимаете, как вычисляются ваши выражения.Прежде всего, обратите внимание, что 0
- это обман, а 1
- правда.all([0,1])
- это False
, потому что не все элементы правдивы.any([0,1])
- это True
, потому что некоторые элементы правдивы.Затем вы ищите членство False
и True
в [0, 2]
.Когда взято как число, True
имеет значение 1
, а False
имеет значение 0
.Таким образом, False in [0, 2]
оценивается как True
, поскольку False == 0
равно True
, поэтому False
было "найдено" в [0, 2]
.Таким же образом, True
не найден, поэтому вы получаете False
для второго выражения.
Обычно all
и any
не используются напрямую в списках;их использование с генераторами очень распространено.Например,
any(x in [0, 2] for x in [0, 1]) # "is any of [0, 1] in [0, 2]?"
all(x in [0, 2] for x in [0, 1]) # "is all of [0, 1] in [0, 2]?"