This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: use multiple "in" in one expression?
Type: behavior Stage: resolved
Components: Parser Versions: Python 3.9
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Dennis Sweeney, lys.nikolaou, pablogsal, weditor
Priority: normal Keywords:

Created on 2021-09-23 04:37 by weditor, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (2)
msg402478 - (view) Author: zeroswan (weditor) Date: 2021-09-23 04:37
I find it's a valid expression: `1 in [1, 2, 3] in [4, 5, 6]`

`a in b in c` is equivalent to `a in b and b in c` 

but this expression seems useless, and easy to confused with (a in b) in c .
in this program, what I originally want is `if a in b and a in c` , But it was mistakenly written as `a in b in c`

This expression is similar to `a<b<c` 。
But it seems very unreasonable here, is this a bug ?
msg402479 - (view) Author: Dennis Sweeney (Dennis Sweeney) * (Python committer) Date: 2021-09-23 06:19
This is the expected behavior, documented here: https://docs.python.org/3/reference/expressions.html#comparisons


That page says:

    * The comparison operators are  "<" | ">" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"

    * "Comparisons can be chained arbitrarily"

    * "Note that a op1 b op2 c doesn’t imply any kind of comparison between a and c, so that, e.g., x < y > z is perfectly legal (though perhaps not pretty)."


So I'll close this for now.

I think it would be hard to change this behavior without introducing a needless backwards-incompatibility, but if you have a proposal, you could bring it up on the Python-Ideas mailing list.
History
Date User Action Args
2022-04-11 14:59:50adminsetgithub: 89431
2021-09-23 06:19:24Dennis Sweeneysetstatus: open -> closed

nosy: + Dennis Sweeney
messages: + msg402479

resolution: not a bug
stage: resolved
2021-09-23 04:37:19weditorcreate