gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:45:33 26 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(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/

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