我有大约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...
答案 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 ...
如果它需要多次计算,请考虑使用一个获取所有布尔值的函数(最好是列表或元组,而不考虑其大小)。