The following code outputs False, when according to the Python Order of Operations it should output True (the order should be in -> ==, not the other way around). Why is == coming before in?
y = "33"
"3" in y == True
Output
False
The following code outputs False, when according to the Python Order of Operations it should output True (the order should be in -> ==, not the other way around). Why is == coming before in?
y = "33"
"3" in y == True
Output
False
 
    
     
    
    The existing answers give helpful advice that you shouldn't compare booleans to True because it's redundant. However, none of the answers actually answer the root question: "why does "3" in y == True evaluate to False?".
That question was answered in a comment by juanpa.arrivillaga:
Also, this is an instance of operator chaining, since
==andinboth count as comparison operators. So this is evaluated as('3' in y) and (y == True)
In Python, comparison operators can be chained. For example, if you want to check that a, b, c, and d are increasing, you can write a < b < c < d instead of a < b and b < c and c < d. Similarly, you can check that they are all equal with a == b == c == d.
Chained comparisons are described in the Python documentation here:
Comparisons can be chained arbitrarily, e.g.,
x < y <= zis equivalent tox < y and y <= z, except thatyis evaluated only once (but in both caseszis not evaluated at all whenx < yis found to be false).
 
    
    In python, comparisons, memberships tests and identity tests all have the same precedence.
The keyword in which checks for membership returns a bool, there is no need for extra compare with a second bool. However, you can group the expressions like so...
y = "33"
("3" in y) == True
