Python如何检测一个变量是否是多个值中的一个?

问题:

我试图做一个将多个变量与整数进行比较的函数,并输出一个三个字母的字符串。我想知道是否有办法将其翻译成Python。所以说:

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")

这将返回一个列表

["c", "d", "f"]

有可能吗?

回答:

你误解布尔表达式是如何工作的?他们不像英文句子那样工作,并且猜测你正在谈论所有这些名称的相同比较。您正在寻找:

if x == 1 or y == 1 or z == 1:

xy否则自己进行评估(False如果0True否则)。
你可以缩短到:

if 1 in (x, y, z):

还是更好:

if 1 in {x, y, z}:

使用set来利用恒定成本成员资格测试(in需要固定的时间量,无论左手操作数是多少)。
当您使用or时,python会将运算符的每一边看作separate表达式。表达式x or y == 1被视为第一个x的布尔测试,那么如果是False,则会对表达式y == 1进行测试。
这是由于operator precedenceor操作符的优先级低于==测试,因此后者被评估为first
然而,即使这是not的情况,并且表达式x or y or z == 1实际上被解释为(x or y or z) == 1,这仍然不会做你期望的。
x or y or z将评估第一个参数是“真实”,例如不是False,数字0或空(有关Python在Python布尔上下文中为false的详细信息,请参阅boolean expressions)。
因此,对于值x = 2; y = 1; z = 0x or y or z将解析为2,因为这是参数中第一个与之类似的值。那么2 == 1将是False,即使y == 1将是True
反之亦然;根据单个变量测试多个值;相同的原因x == 1 or 2 or 3将失败。使用x == 1 or x == 2 or x == 3x in {1, 2, 3}

Code问答: codewenda.com
Stackoverflow:How do I test one variable against multiple values?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

78 − = 77