python - 如何针对一个值测试多个变量?

标签 python if-statement comparison match boolean-logic

我正在尝试制作一个将多个变量与一个整数进行比较并输出三个字母的字符串的函数。我想知道是否有一种方法可以将其转换为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:

否则,xy会自行评估(如果为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 precedenceor运算符的优先级低于==测试,因此首先对其进行评估。

但是,即使不是这种情况,并且实际上将表达式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 == 1Falsey == 1也将是True

反之亦然。针对一个变量测试多个值;出于相同的原因,x == 1 or 2 or 3将失败。使用x == 1 or x == 2 or x == 3x in {1, 2, 3}

关于python - 如何针对一个值测试多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580312/

相关文章:

python - 使用来自 Google Cloud Platform 计算引擎的远程 ssh 解释器在 PyCharm 中显示本地 matplotlib

python - 在所有任务完成后运行任务

python - 如何处理错误的值不足以解开for循环

c# - 比较类型的VALUE和REFERENCE

python - 谷歌 foobar gearing_up_for_destruction

python - list.append() 不保留打乱的值

windows - 根据批处理文件中的 IF ELSE 条件设置变量不同的值

javascript - 如果或条件不起作用

php - mysql数据库与php代码字符串比较等价

database - 有没有人发表过不同内存 RDBMS 之间的详细比较?