Путаница со всеми () и любыми () функциями - PullRequest
0 голосов
/ 20 февраля 2019

Я изучаю Python и испытываю некоторую путаницу с пониманием функций all() и any():

1 in [0,2]             #False. Correct.
all([0,1]) in [0,2]    #True. Why? 1 is not in [0,2]
any([0,1]) in [0,2]    #False. Why? 0 is in [0,2]

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

в питоне, истинность нуля, пусто list, None определены как ложные

    1 in [0,2]             #False. Correct.
    all([0,1]) in [0,2]    #True. Why? 1 is not in [0,2]
    any([0,1]) in [0,2]    #False. Why? 0 is in [0,2]


    all([None,1]) in [None,2]    #False.
    any([[],1]) in [[],2]    #False.
0 голосов
/ 20 февраля 2019

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

all([0, 1]) # return True if all items are True

return False, потому что 0считается False, а когда False in [0, 2] возвращает True, потому что 0 == False.

Для any([0,1]) in [0,2] #False. Why? 0 is in [0,2]

any([0,1]) # return True if any item is True

возвращает True, поскольку 1 = True.

Затем он проверяет True in [0, 2], и нет True или 1 в [0, 2] и возвращает False.

In [1]: 1 == True                                                                                                                                                                                           
Out[1]: True

In [2]: 0 == False                                                                                                                                                                                          
Out[2]: True

In [3]: 2 == True                                                                                                                                                                                           
Out[3]: False
0 голосов
/ 20 февраля 2019

Вы неправильно понимаете, как вычисляются ваши выражения.Прежде всего, обратите внимание, что 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]?"
0 голосов
/ 20 февраля 2019

all([0,1]) возвращает False (поскольку "истинность" 0 определена как False), а False in [0,2] возвращает True (по весьма схожим причинам).

Возможно, вы былинамереваясь сказать что-то вроде

any(x in [0,1] for x in [0,2])  # True
all(x in [0,1] for x in [0,2])  # False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...