Почему приведенный ниже код возвращает FALSE в Python? Разве это не должно быть TRUE , потому что b уже включает "T".
a = ["T"]
b = ["H", "T"]
a in b
False
5 ответов
Оператор in
по-разному ведет себя со строками. и со списками. Для строк это оператор подстроки: "bc" in "abcd"
истинно. Для списков это оператор членства: 2 in [1,2,3,4]
истинно, но [2,3] in [1,2,3,4]
ложно, поскольку [2,3]
не является элементом списка [1,2,3,4]
.
Думайте о in
как о тесте членства . Строки - это особый случай, потому что элемент строки является символом, но Python представляет символы как строки длины 1. Таким образом, член строки (символ) также является подстрокой этой строки. Для строк in
является проверкой принадлежности, если левый операнд является строкой длины 1. Другими словами, когда a
- строка длины 1, а b
- строка, { {X4}} проверяет, является ли a
членом b
, но при этих гипотезах это эквивалентно проверке, является ли a
подстрокой b
. Это расширено до проверки подстроки для произвольных левых операндов (a
пусто или длиннее одного символа).
Если вы хотите проверить, является ли список подсписком другого списка, см. Проверить наличие нарезанного списка в Python
Я думаю, вы считаете, что тест должен вернуть True
, потому что все элементы в a
также находятся в b
, и в этом случае вы действительно хотите проверить, является ли a
подмножество b
, поэтому вам следует создать наборы a
и b
и вместо этого использовать для теста оператор <=
:
>>> a = {"T"}
>>> b = {"H", "T"}
>>> a <= b
True
a in b
возвращает False
, потому что ["T"]
не является элементом ["H", "T"]
. Для сравнения:
>>> a = ["T"]
>>> b = ["H", "T"]
>>> a in b
False
>>> c = "T"
>>> c in b
True
>>> d = ["H", ["T"]]
>>> a in d
True
>>>
Возможно, вы думаете о "T" in b
, ожидая возврата True
. Обратите внимание, что b
- это список string
s, а a
(т.е. ["T"]
) - list
(только с одним элементом: "T"
), поэтому a in b
обязательно равно False
.
А - ["Т"]. b содержит "T", но НЕ содержит ["T"].
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.