gpt4 book ai didi

python - 如何针对单个值测试多个变量是否相等?

转载 作者:IT老高 更新时间:2023-10-28 12:01:03 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,它将多个变量与一个整数进行比较并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成 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 将运算符的每一侧视为 separate 表达式。表达式 x or y == 1 首先被视为对 x 的 bool 测试,然后如果为 False,则表达式 y == 1 经过测试。

这是由于 operator precedence . or 运算符的优先级低于 == 测试,因此后者被评估first

但是,即使 不是,表达式 x or y or z == 1 实际上也被解释为 (x or y or z) == 1 相反,这仍然无法达到您的预期。

x or y or z 将评估为“真实”的第一个参数,例如不是 False、数字 0 或空(参见 boolean expressions 了解 Python 在 bool 上下文中认为什么是 false)。

所以对于值 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/15112125/




25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com