我已经多次找到自己,我需要全部或至少一个等于某事的东西,我会写出类似的东西:
if a==1 and b==1:
do something
或
if a==1 or b==1:
do something
如果事物的数量很少就可以了,但它仍然不优雅。所以,对于大量的事情是否有更好的方法,做上述事情?谢谢。
答案 0 :(得分:28)
选项1:任意/全部
if all(x == 1 for x in a, b, c, d):
if any(x == 1 for x in a, b, c, d):
您还可以使用任何可迭代:
if any(x == 1 for x in states):
选项2 - 链接和
对于您的第一个示例,您可以使用布尔运算符链接:
if a == b == c == d == 1:
对于第二个示例,您可以使用in
:
if 1 in states:
选项3:任何/所有没有谓词
如果你只关心这个值是否真实,你可以进一步简化:
if any(flags):
if all(flags):
答案 1 :(得分:3)
检查出来
if all(x >= 2 for x in (A, B, C, D)):
其中A,B,C,D都是变量......
答案 2 :(得分:0)
我喜欢这种形式,因为它在Python中很容易理解
def cond(t,v):
return t == v
a=1
b=3
tests=[(a,1),(b,2)]
print any(cond(t,v) for t,v in tests) # eq to OR
print all(cond(t,v) for t,v in tests) # eq to AND
打印:
True
False
然后cond()
可以根据需要复杂化。
您可以提供可调用的用户或使用operator module以获得更大的灵活性:
import operator
def condOP(t,v,op=operator.eq):
return op(t,v)
a=1
b=3
tests=[(a,1,operator.eq),(b,2,operator.gt)]
print any(condOP(*t) for t in tests) # eq to OR
print all(condOP(*t) for t in tests) # eq to AND
甚至更简单:
tests=[(a,1,operator.eq),(b,2,operator.gt)]
print any(func(t,v) for t,v,func in tests) # eq to OR
print all(func(t,v) for t,v,func in tests) # eq to AND