How to test multiple variables for equality against a single value?
You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:
if x == 1 or y == 1 or z == 1:
x
and y
are otherwise evaluated on their own (False
if 0
, True
otherwise).
You can shorten that using a containment test against a tuple:
if 1 in (x, y, z):
or better still:
if 1 in {x, y, z}:
using a set
to take advantage of the constant-cost membership test (i.e. in
takes a fixed amount of time whatever the left-hand operand is).
Explanation
When you use or
, python sees each side of the operator as separate expressions. The expression x or y == 1
is treated as first a boolean test for x
, then if that is False, the expression y == 1
is tested.
This is due to operator precedence. The or
operator has a lower precedence than the ==
test, so the latter is evaluated first.
However, even if this were not the case, and the expression x or y or z == 1
was actually interpreted as (x or y or z) == 1
instead, this would still not do what you expect it to do.
x or y or z
would evaluate to the first argument that is 'truthy', e.g. not False
, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).
So for the values x = 2; y = 1; z = 0
, x or y or z
would resolve to 2
, because that is the first true-like value in the arguments. Then 2 == 1
would be False
, even though y == 1
would be True
.
The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3
would fail for the same reasons. Use x == 1 or x == 2 or x == 3
or x in {1, 2, 3}
.
What's the prettiest way to compare one value against multiple values?
Don't try to be too sneaky, especially when it needlessly affects performance.
If you really have a whole heap of comparisons to do, just format it nicely.
if (foobar === foo ||
foobar === bar ||
foobar === baz ||
foobar === pew) {
//do something
}
Check if multiple variables have the same value
If you have an arbitrary sequence, use the all()
function with a generator expression:
values = [x, y, z] # can contain any number of values
if all(v == 1 for v in values):
otherwise, just use ==
on all three variables:
if x == y == z == 1:
If you only needed to know if they are all the same value (regardless of what value that is), use:
if all(v == values[0] for v in values):
or
if x == y == z:
Compare to multiple values in an if statement
Use the in
operator
if num in a :
as in
def test(num):
a = [1, 2, 3]
if num in a :
return True
else :
return False
a work around would be (as suggested by Padraic)
def test(num):
a = [1, 2, 3]
return num in a
This would work because, The in operator compares if the LHS is present in the RHS and returns a boolean value respectively.
Also this is possible
test = lambda x: num in [1, 2, 3]
That is all in a single line!
How to compare multiple variables to the same value?
You want to test a condition for all
the variables:
if all(x >= 2 for x in (A, B, C, D)):
print(A, B, C, D)
This should be helpful if you're testing a long list of variables with the same condition.
If you needed to check:
if A, B, C, or D >= 2:
Then you want to test a condition for any
of the variables:
if any(x >= 2 for x in (A, B, C, D)):
print(A, B, C, D)
How can I check whether multiple variables are equal to the same value?
if((A == 'X' || A == 'O') && A == B && B == C)
{
// Do whatever
}
Related Topics
Read CSV from Google Cloud Storage to Pandas Dataframe
How to Change a Dataframe Column from String Type to Double Type in Pyspark
How to Find Consecutive Numbers in a Python List
How to Save Opened Page as Pdf in Selenium (Python)
How to Read a Column Without Header from CSV and Save the Output in a Txt File Using Python
Webdriverexception: Message: Service Chromedriver Unexpectedly Exited. Status Code Was: 127
High Pass Filter for Image Processing in Python by Using Scipy/Numpy
How to Install a Conda Environment When Offline
How to Redeem Nitro Gifts Automatically With Discord.Py (Self-Bot)
Visual Studio Code Pylint: Unable to Import 'Protorpc'
Grab a Number After a String in a File
How to Write to an Existing Excel File Without Overwriting Data (Using Pandas)
Python Pip Install Fails: Invalid Command Egg_Info
How to Get a Fields Particular Value of Json in Python
Efficient Date Range Overlap Calculation
How to Assign and Use Column Headers in Spark
Getting the Id of the Last Record Inserted for Postgresql Serial Key With Python