4

我有大约 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...

4

4 回答 4

9

假设您在列表/元组中有布尔值:

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
于 2012-08-15T06:32:16.693 回答
1
is_all_true = lambda *args:all(args)

a = True
b = True
c = True

print is_all_true(a,b,c)
于 2012-08-15T08:10:40.117 回答
1

虽然 usingallone and preferably only obvious way to do itPython 中的,但这里有另一种方法可以使用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 中构建复杂的数据库查询以及在其他一些情况下。

于 2012-08-15T06:39:42.277 回答
0
x = a and b and c and d and e ...

如果它必须计算多次,请考虑使用获取所有布尔值的函数(最好作为列表或元组,而不假设其大小)。

于 2012-08-15T06:32:32.847 回答