Множественный оператор In в python - PullRequest
0 голосов
/ 11 ноября 2018
arr = [1, True, 'a', 2]
print('a' in arr in arr) # False

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

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

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

Ответы [ 3 ]

0 голосов
/ 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 (False), а затем проверьте, если 'a' in False (False)
  3. Использование полезного комментария @Klaus D - print('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) # prints True

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

0 голосов
/ 11 ноября 2018

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

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

0 голосов
/ 11 ноября 2018

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

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

Выход:

True

Или это:

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

Выход:

True
...