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 表达式的工作原理;它们不像英语句子那样工作,并且猜测您在这里谈论的是对所有名称的相同比较。您正在寻找:

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

xy 单独计算(False if 0, True 否则)。

您可以使用针对 a tuple 的遏制测试来缩短该时间:

if 1 in (x, y, z):

或者更好:

if 1 in {x, y, z}:

使用 a set利用恒定成本成员资格测试(即,无论左侧操作数是什么,in 都需要固定的时间)。

说明

当您使用or时,Python将运算符的每一侧视为单独的表达式。表达式 x 或 y == 1 首先被视为对 x 的 bool 测试,然后如果为 False,则表达式 y == 1 > 已测试。

这是由于operator precedenceor 运算符的优先级低于 == 测试,因此后者首先被评估。

但是,即使情况并非如此,并且表达式 x or y or z == 1 实际上被解释为 (x or y or z) == 1 相反,这仍然不会达到您期望的效果。

x 或 y 或 z 将计算为第一个“真实”参数,例如不是 False、数字 0 或空(有关 Python 在 bool 上下文中认为 false 的详细信息,请参阅 boolean expressions)。

所以对于值x = 2; y = 1; z = 0x 或 y 或 z 将解析为 2,因为这是参数中第一个类似 true 的值。那么 2 == 1 将为 False,即使 y == 1 将为 True

这同样适用于逆;针对单个变量测试多个值;由于同样的原因,x == 1 or 2 or 3 也会失败。在 {1, 2, 3} 中使用 x == 1 或 x == 2 或 x == 3x

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

相关文章:

c++ - 在 if 语句中输入带数字的字母

java - Hashmap比较运行时间

c++ - 在 C++ 中比较 buffer 和 const char*

python - 我的编码有什么问题? 'AttributeError ' 模块'对象没有属性 'VideoWriter fourcc''

python - 为什么这里的python socket无法解析域名?

c# - 比 If-Else 更好的编码实践

c++ - 如何 "do, if expression increased"?

string - 在C语言中进行替换时输出的多余字符和符号

python - 颜色并不一致地应用于子图中的类别

Python3递归,避免变量更改以在不同的递归调用中全局反射(reflect)