python operator precedence of in and comparison

The following comparisons produce True:

>>> '1' in '11'
True
>>> ('1' in '11') == True
True

And with the parentheses the other way, I get a TypeError:

>>> '1' in ('11' == True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable

So how do I get False with no parentheses?

>>> '1' in '11' == True
False

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

The Python manual says in and == are of equal precedence. Thus, they’re evaluated from left to right by default, but there’s also chaining to consider. The expression you put above ('1' in '11' == True) is actually being evaluated as…

('1' in '11') and ('11' == True)

which of course is False. If you don’t know what chaining is, it’s what allows you to do something like…

if 0 < a < 1:

in Python, and have that mean what you expect (“a is greater than 0 but less than 1”).

Method 2

It has nothing to do with precedence. In Python relational operators chain, and containment is considered a relational operator. Therefore:

'1' in '11' == True

is the same as:

('1' in '11') and ('11' == True)

which is false since True is not equal to “11”.

Method 3

Chaining allows you to write x < y < z, and mean x < y and y < z. Look at this interaction:

>>> (False == True) == False
True
>>> False == (True == False)
True
>>> False == True == False
False
>>>

So in your example, '1' in '11' == True is equivalent to ('1' in '11') and ('11' == True)

Method 4

What happen here?

'1' in '11' == True  ==>  False

is the same that:

'1' in ('11' == True)

but

('11' == True) ==> False

and

'1' in False

is not defined.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x