我试图创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成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"]
这样的事情可能吗?
如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])
您的问题更容易通过以下字典结构解决:
x = 0
y = 1
z = 3
d = {0: 'c', 1:'d', 2:'e', 3:'f'}
mylist = [d[k] for k in [x, y, z]]
你误解了布尔表达式的工作原理;它们不像一个英语句子,你猜这里所有名字的比较都是一样的。您正在寻找:
if x == 1 or y == 1 or z == 1:
x
和y
以其他方式自行计算(False
if0
,True
否则)。
您可以使用对元组的包含测试来缩短该时间:
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=0
,x或y或z
将解析为2
,因为这是参数中的第一个类真值。然后2==1
将是False
,即使y==1
将是True
。
这同样适用于相反的情况;针对单个变量测试多个值x==1或2或3将因同样的原因失败。在{1,2,3}
中使用x==1或x==2或x==3
或x。
我试图做一个函数,将多个变量比较为一个整数,并输出一个三个字母的字符串。我想知道是否有一种方法把它翻译成Python。所以说:
我在数据帧中有一些列是字符变量。下面给出了我感兴趣的列的两行示例: 我想确定所有列具有相同值的行。例如,使用dplyr mutate,我想创建一个名为“allSame”的新变量,其中“dat”第一行的值为“yes”,第二行的值是“no”。 我还想按数字而不是名称对列进行索引,因为某些变量具有很长的名称,并且数据帧中有多个列集,我想为此执行此操作。
在我的代码中,我循环遍历字符串中的每个字符。我需要测试该字符是否是空格。 这是我的代码: 我也尝试过: 两者都给出了错误 或 我在测试字母或数字时没有错误。我做错了什么? 谢谢, 扎克
问题内容: Python如何将多个变量与一个值进行比较?,例如: 我希望返回一个列表: 问题答案: 方法1 方法2 使用元组或列表 方法3 最好是使用set集合
是否有更简单的方法来确定变量是否等于一系列值,例如: 而不是像这样迟钝的事情: ?
问题内容: 我们有n个变量,它们没有任何结构。 例如在python中,我可以这样做: 在Java中,我必须这样做: 您知道一种改进此语法的简单方法吗?(想象一下很长的变量名以及很多) 谢谢。 问题答案: 如果您有很多这样的变量,是否考虑过将它们放在集合中,而不是将它们作为单独的变量?此时有多种选择。 如果发现自己经常这样做,则可能要编写辅助方法,可能使用varargs语法。例如: glowcode