如何测试多个变量是否等于单个值?
如何测试多个变量是否等于单个值?
我正在尝试编写一个函数,它可以将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有一种方法可以将其转换为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"]
你误解了布尔表达式的工作方式,它们不像英语句子那样工作,所以猜测你在这里谈论的是相同的比较。你要找的是:
if x == 1 or y == 1 or z == 1:
x
和 y
在其他情况下是单独评估的(如果是 0
则为 False
,否则为 True
)。
你可以使用针对 元组的包含测试来缩短代码:
if 1 in (x, y, z):
或者更好的方式是:
if 1 in {x, y, z}:
利用常数时间成员测试的 set
。
说明
当你使用 or
时,python 将该运算符的每个侧面视为单独的表达式。表达式 x or y == 1
被视为首先对 x
进行布尔测试,然后如果其为 False,则对表达式 y == 1
进行测试。
这是由于 运算符优先级。逻辑 或 运算符的优先级低于 == 测试的优先级,因此后者首先进行评估。
但是,即使这不是情况,实际上将表达式 x or y or z == 1
解释为 (x or y or z) == 1
,这仍无法实现你期望的功能。
x or y or z
将计算为第一个“真值”参数,例如不是 False
、数字 0 或空值(请参阅布尔表达式,以了解 Python 在布尔上下文中认为什么是 false)。
因此,对于值 x = 2; y = 1; z = 0
,x or y or z
将解析为 2
,因为它是参数中第一个类似于 true 的值。然后,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}
。