python if语句中and/or的简写形式
如果要对多个值进行相同的比较,是否有一种在if语句中编写比较的简写方法。只是好奇这样的事情是否可能发生。谢谢你的帮助python if语句中and/or的简写形式,python,if-statement,comparison,shortcut,Python,If Statement,Comparison,Shortcut,如果要对多个值进行相同的比较,是否有一种在if语句中编写比较的简写方法。只是好奇这样的事情是否可能发生。谢谢你的帮助 a =1 b =1 c =1 if a == 1 and b ==1 and c == 1: print('yes') # It would be nice if you could do this or something like it. if a,b,c == 1: print('this would be easier') 您可以对和使用all: #
a =1
b =1
c =1
if a == 1 and b ==1 and c == 1:
print('yes')
# It would be nice if you could do this or something like it.
if a,b,c == 1:
print('this would be easier')
您可以对
和使用all
:
# same as:
# if a == 1 and b == 1 and c == 1:
if all(x == 1 for x in (a, b, c)):
...
也可以使用运算符链接:
if a == b == c == 1:
...
但我并没有在实际代码中看到这一点
对于或
,您可以使用任何
:
# same as:
# if a == 1 or b == 1 or c == 1:
if any(x == 1 for x in (a, b, c)):
...
据我记忆所及,虽然您可以在
中使用,但没有运算符链接技巧:
if 1 in (a, b, c):
...
这确实会对性能产生一些影响(即,它创建一个新的元组只是为了进行比较)。通常情况下,这是非常便宜的,除了最紧的循环外,在任何情况下都不会被注意到。类似于如果值是可散列的:
if set((a, b, c)) == {1}:
# All are 1.
或者,如果3个值都是非负整数,将它们全部相乘,看看结果是否为1
if a * b * c == 1:
# All are 1.
一般的答案是all(…)
,就像mgilson的答案一样。这个好吗(a,b,c)==(1,1,2)
?你需要小心乘法一。。。这很聪明,但并不总是奏效。考虑<代码> A,B,C=1,-1,-1 < /代码>:-)OH,我应该说非负数。让我把答案编辑一下。为什么不使用{a,b,c}
?我知道你知道,你在{1}
中使用它。与简单地链接几个比较相比,乘法和(特别是)构建一个集合是昂贵的。将计算整个列表,但会起作用:所有([a==1,b==1,c==1])
1 in(a,b,c)
在a
时可能会更慢,b
和c
是昂贵的表达式,而a
已经不是1
了,因此b
和c
不需要进行计算。出于同样的原因,我更喜欢在和的情况下使用1==a==b==c
,也就是说,把“目标”放在第一位。@StefanPochmann——是的,如果元组中有很多元素(如果你从头开始构建它,这是不可能的)或者如果a
,没有短路是一件大事,b
和c
是任意(昂贵)表达式,而不是简单的名称查找。。。根据问题的措辞,OP似乎正在进行简单的名称查找,但在其他情况下,您的观点应该得到认可。。。