我正在尝试制作一个将多个变量与整数进行比较并输出三个字母的字符串的函数。我想知道是否有办法将其翻译成 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"]
原文由 user1877442 发布,翻译遵循 CC BY-SA 4.0 许可协议
您误解了布尔表达式的工作原理;它们不像英语句子那样工作,并猜测您在这里谈论的是所有名称的相同比较。您正在寻找:
x
andy
are otherwise evaluated on their own (False
if0
,True
otherwise).您可以使用针对 tuple 的包含测试来缩短它:
或者更好:
使用
set
来利用恒定成本成员资格测试(即in
无论左侧操作数是什么都需要固定的时间)。解释
当您使用
or
时,python 将运算符的每一侧视为 单独 的表达式。表达式x or y == 1
首先被视为x
的布尔测试,然后如果为 False,则测试表达式y == 1
。这是由于 运算符优先级。
or
运算符的优先级低于==
测试,因此 先 评估后者。但是,即使 不是 这种情况,并且表达式
x or y or z == 1
实际上被解释为(x or y or z) == 1
相反,这仍然不会像您期望的那样做。x or y or z
将评估为“真实”的第一个参数,例如不是False
,数字 0 或空(有关 Python 在布尔上下文中认为错误的详细信息,请参见 布尔表达式)。因此对于值
x = 2; y = 1; z = 0
,x or y or z
将解析为2
,因为这是参数中的第一个真值。那么2 == 1
将是False
,即使y == 1
会是True
def4883bd913d—def48477d。反过来也一样;针对单个变量测试多个值;
x == 1 or 2 or 3
会因为同样的原因而失败。使用x == 1 or x == 2 or x == 3
或x in {1, 2, 3}
。