立即检查一组变量的布尔值

时间:2012-08-15 06:30:57

标签: python boolean

我有大约10个布尔变量,如果所有这十个变量值都是True,我需要设置一个新的布尔变量x=True。如果其中一个是False,那么设置x= False我可以这样做以一种方式

if (a and b and c and d and e and f...):
    x = True
else:
    x=False

显然看起来非常难看。请提出更多的pythonic解决方案。

丑陋的部分是a and b and c and d and e and f...

4 个答案:

答案 0 :(得分:9)

假设你在列表/元组中有bool:

x = all(list_of_bools)

或正如@minopret

所建议的那样
x= all((a, b, c, d, e, f))

示例:

>>> list_of_bools = [True, True, True, False]
>>> all(list_of_bools)
False
>>> list_of_bools = [True, True, True, True]
>>> all(list_of_bools)
True

答案 1 :(得分:1)

虽然使用all是Python中的one and preferably only obvious way to do it,但是使用and_模块中的operator函数并使用reduce

进行同样的操作是另一种方法。
>>> a = [True, True, False]
>>> from operator import and_
>>> reduce(and_, a)
False
>>> b = [True, True, True]
>>> reduce(and_, b)
True

修改如Duncan所述,and_是按位&运算符,而不是逻辑and。它只适用于布尔值,因为它们将被转换为int(1或0)

通过评论,人们应该真正使用BIF all来实现OP的要求。我觉得添加这个作为答案是因为我觉得它有时候很有用,例如,在Django中使用Q对象和其他一些情况构建复杂的数据库查询。

答案 2 :(得分:1)

is_all_true = lambda *args:all(args)

a = True
b = True
c = True

print is_all_true(a,b,c)

答案 3 :(得分:0)

x = a and b and c and d and e ...

如果它需要多次计算,请考虑使用一个获取所有布尔值的函数(最好是列表或元组,而不考虑其大小)。