Why does this not work as an array membership test?

>>> 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

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