什么是逻辑上结合布尔列表的最“pythonic”方式?

时间:2010-09-09 02:16:34

标签: python list boolean

我有一个布尔列表,我想用逻辑组合使用和/或。扩展的操作将是:

vals = [True, False, True, True, True, False]

# And-ing them together
result = True
for item in vals:
    result = result and item

# Or-ing them together
result = False
for item in vals:
    result = result or item

上面的每一个都有漂亮的单行吗?

3 个答案:

答案 0 :(得分:81)

请参阅all(iterable)

  

如果所有元素都返回True    iterable 是真的(或者如果 iterable   是空的。

any(iterable)

  

如果有任何元素,请返回True    iterable 是真的。如果 iterable 为空,请返回False

答案 1 :(得分:6)

最好的方法是使用any()all()函数。

vals = [True, False, True, True, True]
if any(vals):
   print "any() reckons there's something true in the list."
if all(vals):
   print "all() reckons there's no non-True values in the list."
if any(x % 4 for x in range(100)):
   print "One of the numbers between 0 and 99 is divisible by 4."

答案 2 :(得分:1)

演示NullUserException的答案。

In [120]: a
Out[120]: 
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)

In [121]: a.all()
Out[121]: True

In [122]: b
Out[122]: 
array([[False,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)

In [123]: b.all()
Out[123]: False

In [124]: b.any()
Out[124]: True