python - How do I test one variable against multiple values? -
i'm trying make function compare multiple variables integer , output string of 3 letters. wondering if there way translate python. say:
x = 0 y = 1 z = 3 mylist = [] if x or y or z == 0 : mylist.append("c") elif x or y or z == 1 : mylist.append("d") elif x or y or z == 2 : mylist.append("e") elif x or y or z == 3 : mylist.append("f")
which return list of
["c", "d", "f"]
is possible?
you misunderstand how boolean expressions work; don't work english sentence , guess talking same comparison names here. looking for:
if x == 1 or y == 1 or z == 1:
x
, y
otherwise evaluated on own (false
if 0
, true
otherwise).
you can shorten to:
if 1 in (x, y, z):
or better still:
if 1 in {x, y, z}:
using set
take advantage of constant-cost membership test (in
takes fixed amount of time whatever left-hand operand is).
when use or
, python sees each side of operator separate expressions. expression x or y == 1
treated first boolean test x
, if false, expression y == 1
tested.
this due operator precedence. or
operator has lower precedence ==
test, latter evaluated first.
however, if not case, , expression x or y or z == 1
interpreted (x or y or z) == 1
instead, still not expect do.
x or y or z
evaluate first argument 'truthy', e.g. not false
, numeric 0 or empty (see boolean expressions details on python considers false in boolean context).
so values x = 2; y = 1; z = 0
, x or y or z
resolve 2
, because first true-like value in arguments. 2 == 1
false
, though y == 1
true
.
the same apply inverse; testing multiple values against single variable; x == 1 or 2 or 3
fail same reasons. use x == 1 or x == 2 or x == 3
or x in {1, 2, 3}
.
Comments
Post a Comment