python if语句中and/or的简写形式

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: #

如果要对多个值进行相同的比较,是否有一种在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

# 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似乎正在进行简单的名称查找,但在其他情况下,您的观点应该得到认可。。。