# Issue

This Content is from Stack Overflow. Question asked by KIAaze

I just came across some python code with the following statement:

``````if a==b in [c,d,e]:
...
``````

It turns out that:

``````>>> 9==9 in [1,2,3]
False
>>> 9==9 in [1,2,3,9]
True
>>> (9==9) in [1,2,3,9]
True
>>> 9==(9 in [1,2,3,9])
False
>>> True in [1,2,3,9]
True
>>> True in []
False
>>> False in []
False
>>> False in [1,2,3]
False
``````

Am I right in assuming that `a==b in [c,d,e]` is equivalent to `(a==b) in [c,d,e]` and therefore only really makes sense if `[c,d,e]` is a list of True/False values?

And in the case of the code I saw `b` is always in the list `[c,d,e]`. Would it then be equivalent to simply using `a==b`?

# Solution

Just to throw another factor into the mix, operator chaining needs to be kept in mind as well:

Formally, if a, b, c, …, y, z are expressions and op1, op2, …, opN are comparison operators, then a op1 b op2 c … y opN z is equivalent to a op1 b and b op2 c and … y opN z, except that each expression is evaluated at most once.

The docs there specify "comparison operators", but later down is the addition:

Note that comparisons, membership tests, and identity tests, all have the same precedence and have a left-to-right chaining feature as described in the Comparisons section.

For example, `9==9 in [1,2,3,9]` is confusingly the same as `9==9 and 9 in [1, 2, 3, 9]`.

``` This Question was asked in  StackOverflow by  KIAaze and Answered by Carcigenicate It is licensed under the terms of
CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.```