当前位置: 首页 > 知识库问答 >
问题:

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

查宜民
2023-03-14

我试图创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成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"]

这样的事情可能吗?

共有3个答案

姜经武
2023-03-14

如Martijn Pieters所述,正确且最快的格式为:

if 1 in {x, y, z}:

根据他的建议,您现在可以使用单独的if语句,以便Python可以读取每条语句,无论前者是True还是False。例如:

if 0 in {x, y, z}:
    mylist.append("c")
if 1 in {x, y, z}:
    mylist.append("d")
if 2 in {x, y, z}:
    mylist.append("e")
...

这是可行的,但如果您对使用字典感到满意(请参阅我在这里所做的),您可以通过制作一个初始字典,将数字映射到您想要的字母,然后只使用for循环来解决这个问题:

num_to_letters = {0: "c", 1: "d", 2: "e", 3: "f"}
for number in num_to_letters:
    if number in {x, y, z}:
        mylist.append(num_to_letters[number])
呼延衡
2023-03-14

您的问题更容易通过以下字典结构解决:

x = 0
y = 1
z = 3
d = {0: 'c', 1:'d', 2:'e', 3:'f'}
mylist = [d[k] for k in [x, y, z]]
郗阳德
2023-03-14

你误解了布尔表达式的工作原理;它们不像一个英语句子,你猜这里所有名字的比较都是一样的。您正在寻找:

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

xy以其他方式自行计算(Falseif0True否则)。

您可以使用对元组的包含测试来缩短该时间:

if 1 in (x, y, z):

或者更好:

if 1 in {x, y, z}:

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

当您使用时,python将运算符的每一面视为单独的表达式。表达式x或y==1首先被视为对x的布尔测试,如果是False,则测试表达式y==1

这是由于运算符优先级。运算符的优先级低于=测试,因此先计算后者。

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

x或y或z将计算为第一个参数“truthy”,例如notFalse、数值0或空(有关Python在布尔上下文中认为False的内容的详细信息,请参阅布尔表达式)。

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

这同样适用于相反的情况;针对单个变量测试多个值x==1或2或3将因同样的原因失败。在{1,2,3}中使用x==1或x==2或x==3x。

 类似资料:
  • 我试图做一个函数,将多个变量比较为一个整数,并输出一个三个字母的字符串。我想知道是否有一种方法把它翻译成Python。所以说:

  • 我在数据帧中有一些列是字符变量。下面给出了我感兴趣的列的两行示例: 我想确定所有列具有相同值的行。例如,使用dplyr mutate,我想创建一个名为“allSame”的新变量,其中“dat”第一行的值为“yes”,第二行的值是“no”。 我还想按数字而不是名称对列进行索引,因为某些变量具有很长的名称,并且数据帧中有多个列集,我想为此执行此操作。

  • 在我的代码中,我循环遍历字符串中的每个字符。我需要测试该字符是否是空格。 这是我的代码: 我也尝试过: 两者都给出了错误 或 我在测试字母或数字时没有错误。我做错了什么? 谢谢, 扎克

  • 问题内容: Python如何将多个变量与一个值进行比较?,例如: 我希望返回一个列表: 问题答案: 方法1 方法2 使用元组或列表 方法3 最好是使用set集合

  • 是否有更简单的方法来确定变量是否等于一系列值,例如: 而不是像这样迟钝的事情: ?

  • 问题内容: 我们有n个变量,它们没有任何结构。 例如在python中,我可以这样做: 在Java中,我必须这样做: 您知道一种改进此语法的简单方法吗?(想象一下很长的变量名以及很多) 谢谢。 问题答案: 如果您有很多这样的变量,是否考虑过将它们放在集合中,而不是将它们作为单独的变量?此时有多种选择。 如果发现自己经常这样做,则可能要编写辅助方法,可能使用varargs语法。例如: glowcode