Почему приведенный ниже код возвращает FALSE в Python? Разве это не должно быть TRUE , потому что b уже включает "T".

a = ["T"]
b = ["H", "T"]
a in b
False
-4
Kolom 1 Авг 2020 в 00:58

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

7
Gilles 'SO- stop being evil' 31 Июл 2020 в 22:08

Я думаю, вы считаете, что тест должен вернуть True, потому что все элементы в a также находятся в b, и в этом случае вы действительно хотите проверить, является ли a подмножество b, поэтому вам следует создать наборы a и b и вместо этого использовать для теста оператор <=:

>>> a = {"T"}
>>> b = {"H", "T"}
>>> a <= b
True
4
blhsing 31 Июл 2020 в 22:09

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
>>> 
3
Code-Apprentice 31 Июл 2020 в 21:59

Возможно, вы думаете о "T" in b, ожидая возврата True. Обратите внимание, что b - это список string s, а a (т.е. ["T"]) - list (только с одним элементом: "T" ), поэтому a in b обязательно равно False.

2
zabop 31 Июл 2020 в 22:02

А - ["Т"]. b содержит "T", но НЕ содержит ["T"].

2
M-Chen-3 31 Июл 2020 в 22:00
63199602