我有大约 10 个布尔变量,x=True
如果所有这 10 个变量值都为 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...
假设您在列表/元组中有布尔值:
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
is_all_true = lambda *args:all(args)
a = True
b = True
c = True
print is_all_true(a,b,c)
虽然 usingall
是one and preferably only obvious way to do it
Python 中的,但这里有另一种方法可以使用operator模块中的and_函数和 reduce
>>> a = [True, True, False]
>>> from operator import and_
>>> reduce(and_, a)
False
>>> b = [True, True, True]
>>> reduce(and_, b)
True
编辑:正如邓肯所说,and_
是按位运算&
符而不是逻辑and
. 它仅适用于布尔值,因为它们将被强制转换为 int(1 或 0)
根据评论,人们应该真正使用 BIFall
来实现 OP 的要求。我想添加这个作为答案,因为我发现它有时很有用,例如,使用 Q 对象在 Django 中构建复杂的数据库查询以及在其他一些情况下。
x = a and b and c and d and e ...
如果它必须计算多次,请考虑使用获取所有布尔值的函数(最好作为列表或元组,而不假设其大小)。