我正在尝试制作一个将多个变量与一个整数进行比较并输出三个字母的字符串的函数。我想知道是否有一种方法可以将其转换为Python。所以说:
x = 0
y = 1
z = 3
mylist = []
if x or y or z == 0 :
mylist.append("c")
if x or y or z == 1 :
mylist.append("d")
if x or y or z == 2 :
mylist.append("e")
if x or y or z == 3 :
mylist.append("f")
这将返回以下列表:
["c", "d", "f"]
这样的事情可能吗?
最佳答案
您误解了 bool(boolean) 表达式是如何工作的。它们不像英文句子那样工作,并且猜测您在这里谈论的是所有名称的相同比较。您正在寻找:
if x == 1 or y == 1 or z == 1:
否则,
x
和y
会自行评估(如果为False
,则为0
;否则为True
)。您可以使用针对a tuple的遏制测试来缩短它:
if 1 in (x, y, z):
还是更好:
if 1 in {x, y, z}:
使用a
set
来利用恒定成本的成员资格测试(不管左手操作数是多少,in
都会花费固定的时间)。当您使用
or
时,python会将运算符的每一面视为单独的表达式。表达式x or y == 1
首先被视为x
的 bool(boolean) 测试,然后如果它为False,则测试表达式y == 1
。这是由于operator precedence。
or
运算符的优先级低于==
测试,因此首先对其进行评估。但是,即使不是这种情况,并且实际上将表达式
x or y or z == 1
解释为(x or y or z) == 1
,这仍然不能满足您的期望。x or y or z
的计算结果为第一个参数“truthy”,例如不是False
,数字0或为空(有关 bool(boolean) 型上下文中Python认为是false的详细信息,请参见boolean expressions)。因此,对于
x = 2; y = 1; z = 0
值,x or y or z
将解析为2
,因为这是参数中的第一个真值。即使2 == 1
是False
,y == 1
也将是True
。反之亦然。针对一个变量测试多个值;出于相同的原因,
x == 1 or 2 or 3
将失败。使用x == 1 or x == 2 or x == 3
或x in {1, 2, 3}
。
关于python - 如何针对一个值测试多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580312/