>>> 5 in [1, 2, 3, 4] == False False
I get that this is a bizarre way to test membership, and that
>>> 5 not in [1, 2, 3, 4] True
is the “correct” way. What confuses me is that its behavior is different from both
>>> (5 in [1, 2, 3, 4]) == False True
and
>>> 5 in ([1, 2, 3, 4] == False) TypeError ...
Have I missed something obvious? (Tested in Python 2.7 and Python 3.4).
To clarify, I understand the last three snippets. I am asking about the behavior of the first snippet, and why it is different.
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
This is a chained comparison. You may have known that you can do
1 < 2 < 3
in Python, and it’s equivalent to (1 < 2) and (2 < 3). (Or maybe you didn’t. Now you know.) Well, the same thing applies to in and ==.
5 in [1, 2, 3, 4] == False
is equivalent to
(5 in [1, 2, 3, 4]) and ([1, 2, 3, 4] == False)
Since [1, 2, 3, 4] is not equal to False, the whole expression evaluates to False.
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