Почему этот тест Python не является ложным? - PullRequest
2 голосов
/ 18 июня 2020

Python 3.7: Почему

{'A'} not in {'A'}

оценивается как истина?

Разве правильный ответ не должен быть «ложным»? {'A'}. Is

У меня работает следующий код:

not {'A'}.issubset({'A'})

Но я хотел бы понять, почему первый не работает.

Ответы [ 2 ]

1 голос
/ 18 июня 2020
({'A'} not in {'A'}) is True
({'A'} in {'B', frozenset({'A'})}) is True
{'A'}.issubset({'A'}) is True
('A' not in {'A'}) is False

{'A'} буквально не содержит набор {'A'}. Он содержит 'A'. Однако {frozenset({'A'})} содержит внутренний набор frozenset({'A'}) и строку 'B'. Невозможно записать {{'A'}}, потому что это потребует, чтобы внутренний набор был хешируемым, но наборы не хешируемы, а frozenset s - есть.

Также {'A'} является подмножеством самого себя, которое отличается от того, что буквально содержит копию самого себя.

0 голосов
/ 18 июня 2020

Итак, 'A' - это строка, а {'A'} - это набор, содержащий строку 'A'. Ваш правый операнд {'A'} не содержит вашего левого операнда {'A'} (он содержит только 'A'), поэтому все выражение истинно. Но если вы напишете 'A' not in {'A'}, результат будет False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...