if x or y in LIST is always true even if it is not

Question:

I have an if statement which always returns as true even if it is not.
I have a global list :
NUMBERS_LIST = []

Numbers get added to it via an API call, that works fine.

When it does the following:

def func():
    if 8 or 9 in NUMBER_LIST:
        return true
    elif 1 or 2 in NUMBER_LIST:
        return true

But for some reason, it always returns true on the first if statement, even if NUMBER_LIST = [1]

I debugged my program and can see that NUMBER_LIST does contain 1, it’s type is int.
I tried doing int(8), converting both types to str but that did not fix my issue.
When I debugged and step through the program, it doesn’t really tell me much, I am using Pycharm.

Asked By: trigster

||

Answers:

or does not distribute. What you have written is not equivalent to

if 8 in NUMBER_LIST or 9 in NUMBER_LIST:

which is what you want, but to

if 8 or (9 in NUMBER_LIST):

Since 8 is a truthy value, the containment operation is never evaluated.

Answered By: chepner
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.