Множественный оператор «In» в python

arr = [1, True, 'a', 2]
print('a' in arr in arr) # False

Можете ли вы объяснить мне, почему этот код выводит «False»?

Вопрос закрыт.

Ответ от @KlausD.: На самом деле это цепочка операторов сравнения, которая будет интерпретироваться как ('a' in arr) and (arr in arr).


person Matvey    schedule 11.11.2018    source источник
comment
Просто сделайте 'a' in arr   -  person BENY    schedule 11.11.2018
comment
Я полагаю, вы ожидаете True, потому что видите 'a' in arr in arr как True in arr?   -  person Austin    schedule 11.11.2018
comment
@Остин, просто запусти этот код. Выводит False.   -  person Matvey    schedule 11.11.2018
comment
Пожалуйста, объясните, каким был ожидаемый результат и почему. Вопрос как то не ясен   -  person CIsForCookies    schedule 11.11.2018
comment
@CIsForCookies, что ты не понял? Я хочу понять, почему выражение «а» в обр в обр ложно   -  person Matvey    schedule 11.11.2018
comment
См., например. здесь информацию о цепочке операторов.   -  person khelwood    schedule 11.11.2018


Ответы (3)


Я считаю, что это то, что вы пытаетесь сделать:

arr = [1, True, 'a', 2]
print( 'a' in arr)

Выход:

True

Или это:

arr = [1, True, 'a', 2]
print(bool(['a' in arr]) in arr)

Выход:

True
person Sanchit Kumar    schedule 11.11.2018
comment
вы можете просто сделать print(('a' in arr) in arr) вместо print(bool(['a' in arr]) in arr), но это не проверяет, находится ли 'a' в arr. Он проверяет, есть ли True! Измените обр на arr = ['a', 2] и проверьте - person CIsForCookies; 11.11.2018
comment
Вопрос не ясен. Я предполагаю, что он хочет получить вывод из 'a' в arr как True, а затем проверить, верно ли это в arr. - person Sanchit Kumar; 11.11.2018
comment
Законный. Я думал, что ОП хочет только проверить, 'a' in arr. В любом случае, на самом деле проверяется, если arr in arr, а затем, если в результате есть 'a' :-P - person CIsForCookies; 11.11.2018
comment
bool(['a' in arr]) почти наверняка не является частью того, что хотел вопрошавший, учитывая, что он вызывает bool в одноэлементном списке и возвращает True независимо от того, находится ли 'a' в arr. - person user2357112 supports Monica; 11.11.2018

  1. print('a' in arr in arr) // False интерпретируется как print('a' in arr in arr) // 0, что выдает ошибку ZeroDivisionError: целочисленное деление или по модулю на ноль. Если вы хотели закомментировать False, сделайте это, используя "#", а не "//" (например, print('a' in arr in arr) # False)
  2. 'a' in arr in arr читается справа налево[1]: проверьте, если arr in arr (ложь), а затем проверьте, если 'a' in False (ложь)
  3. Используя полезный комментарий @Klaus Dprint('a' in arr in arr) оценивается как print(('a' in arr) and (arr in arr)) из-за цепочки операторов. Это, в свою очередь, обрабатывается в print(True and False) -> print(False)

Чтобы проверить, находится ли 'a' в arr, просто проверьте print('a' in arr) # печатает True

[1]Ну, не совсем так. Как видно из [ В каком порядке находится оператор if оценивается в Python ], оценка выполняется справа налево, поэтому на самом деле происходит следующее: (1) проверьте, находится ли «a» в «чем-то». (2) оценить это «что-то», проверив, является ли arr in arr. (3) использовать результат сказанного что-то (который, к сожалению, False, arr не является членом его левого поля) и проверить, находится ли 'a' внутри этого (имеется в виду, проверить, есть ли 'a' in True, что опять же, False[1]

person CIsForCookies    schedule 11.11.2018
comment
1. Да, извини. Должен быть # - person Matvey; 11.11.2018
comment
2. 'a' in False неверное выражение. Это выдаст ошибку. - person Matvey; 11.11.2018
comment
1. На самом деле это цепочка операторов сравнения и будет интерпретироваться как ('a' in arr) and (arr in arr). - person Klaus D.; 11.11.2018
comment
@KlausD, ты прав. Спасибо чувак. Это правильный ответ на мой вопрос. - person Matvey; 11.11.2018

Это False, потому что 'a' — это in 'arr', а 'arr' — это не in 'arr'.

Значение 'arr' не может быть само по себе.

person Jamie Lindsey    schedule 11.11.2018