如何测试多个变量是否等于单个值?

61 浏览
0 Comments

如何测试多个变量是否等于单个值?

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

使用类似字典结构更容易解决你的问题:

x = 0
y = 1
z = 3
d = {0: 'c', 1:'d', 2:'e', 3:'f'}
mylist = [d[k] for k in [x, y, z]]

0
0 Comments

你误解了布尔表达式的工作方式,它们不像英语句子那样工作,所以猜测你在这里谈论的是相同的比较。你要找的是:

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

xy 在其他情况下是单独评估的(如果是 0 则为 False,否则为 True)。

你可以使用针对 元组的包含测试来缩短代码:

if 1 in (x, y, z):

或者更好的方式是:

if 1 in {x, y, z}:

利用常数时间成员测试的 set

说明

当你使用 or 时,python 将该运算符的每个侧面视为单独的表达式。表达式 x or y == 1 被视为首先对 x 进行布尔测试,然后如果其为 False,则对表达式 y == 1 进行测试。

这是由于 运算符优先级。逻辑 或 运算符的优先级低于 == 测试的优先级,因此后者首先进行评估。

但是,即使这不是情况,实际上将表达式 x or y or z == 1 解释为 (x or y or z) == 1,这仍无法实现你期望的功能。

x or y or z 将计算为第一个“真值”参数,例如不是 False、数字 0 或空值(请参阅布尔表达式,以了解 Python 在布尔上下文中认为什么是 false)。

因此,对于值 x = 2; y = 1; z = 0x or y or z 将解析为 2,因为它是参数中第一个类似于 true 的值。然后,2 == 1 将为 False,即使 y == 1 将为 True

同样的情况也适用于反向测试;测试单个变量对多个值,x == 1 or 2 or 3 也会因相同的原因而失败。使用 x == 1 or x == 2 or x == 3x in {1, 2, 3}

0