如何将多个变量与同一个值进行比较?

33

我正在使用Python,想要编写一个包含多个变量的if语句。

例如:

if A, B, C, and D >= 2:
    print (A, B, C, and D)

我意识到这不是正确的语法,这正是我要问的问题——这种类型的if语句的正确Python语法是什么?


请参考以下链接:https://dev59.com/Vmoy5IYBdhLWcg3wScTb - Karl Knechtel
7个回答

52
您想要测试一个条件是否对所有变量都成立:
if all(x >= 2 for x in (A, B, C, D)):
    print(A, B, C, D)

如果您需要测试一组带有相同条件的变量,这将非常有帮助。


如果您需要检查:
if A, B, C, or D >= 2:

那么您想要测试任意变量的条件:

if any(x >= 2 for x in (A, B, C, D)):
    print(A, B, C, D)

20

另一个想法:

if min(A, B, C, D) >= 2:
    print A, B, C, D

1
它适用于这个特定的情况,但是一般来说,你不能同时比较多个变量的相同条件。 - Óscar López
2
min 的意思是:找出括号内所有数字中的最小值。如果最小值大于或等于2,我们可以得出结论:所有变量都大于或等于2。 - Óscar López
2
min(...) 不会短路,而 all(...) 会。 - John La Rooy
1
它在结果已知时立即停止评估。 - Fred Larson
有没有不适用的情况? - bendl
显示剩余3条评论

7

我可能会这样写:

v = A, B, C, D
if all(i >= 2 for i in v):
    print v

谢谢!为了澄清您告诉我的意思...如果我有A、B、C和D,我能不能只说v = A,B,C,D(返回-无法使代码标记起作用),如果all(v >= 2):(返回)print (v)? - chingchong
1
@TerriMoore:不是的,因为那样会问元组(A, B, C, D)是否大于或等于2,而不是所有值是否都>=2。由于技术原因,在Python 2中这实际上不会引发异常,只会给出意外的结果,但在Python 3中它会引发错误(应该如此)。 - DSM
我正在使用Python 3。 "i in v" 这个东西具体是在看什么? - chingchong
@LimboPeng的答案更直接地实现了,没有中间的“v”变量。 - PaulMcG
那么你推荐 Limbo 的答案胜过 DSM 的吗? - chingchong

3

如何:

if A >= 2 and B >= 2 and C >= 2 and D >= 2:
    print A, B, C, D

对于一般情况,除非您愿意将变量放入列表中(请参阅其他答案),否则没有更短的方法来指示相同条件必须对所有变量成立。


如果我需要执行其他条件,DSM 提供的答案是否是最好的? - chingchong
同样的东西:它只在所有变量的条件相同时才能工作;否则,您必须逐个单独测试每个变量,就像我的答案中所示。 - Óscar López
是的,我希望它们都能单独针对相同的条件进行测试,而不是作为一组进行测试,但我想将所有内容放入一个if语句中。 - chingchong
那我会选择@Limbo Peng或DSM的答案。 - Óscar López
谢谢,我想我会选择Limbo Peng的。 - chingchong
显示剩余4条评论

3
如果您有十个变量,想将它们作为一组来处理,您可能希望将它们作为列表的元素、字典中的值或对象的属性。例如:
my_dict = {'A': 1, 'B': 2, 'C': 3 }

if all(x > 2 for x in my_dict.values()):
    print "They're all more than two!"

不,那不是我在这里想要实现的。但还是谢谢! - chingchong

2

根据你想要达到的目的,将列表传递给函数可能是可行的。

def foo(lst):
    for i in lst:
        if i < 2:
            return
    print lst

糟糕!我刚刚发布了与你相同的答案。哈哈 - Limbo Peng
如果您能更详细地解释这段代码的作用,那将非常有帮助。谢谢! - chingchong
你将一个数字列表传递给函数。对于列表中的每个项目,检查该项目是否小于2 - 如果该项目小于2,则函数“返回”(或退出)而不打印任何内容。继续检查列表中的每个项目。一旦检查了每个项目,并且没有任何项目导致函数返回/退出,我们就知道所有项目都大于等于2,因此我们可以打印该列表。 - Phil

1

除非她可能正在要求这个:

if A >= 2 and B >= 2 and C >= 2 and D >= 2:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接