如果python中的二维数组至少有一个True,如何返回True

时间:2019-05-05 07:34:03

标签: python python-3.x multidimensional-array boolean

我正在尝试编写代码,以检查2D数组(仅由布尔值组成)是否至少有一个True,如果至少有一个True,则返回True。

我尝试使用all()函数,但无法提出解决方案。我假设我需要的与all()函数相反。

>>> array1 = [[True, False], [False, False]]
>>> all([all(row) for row in array1)
False # This should be True
>>> array2 = [[False, False], [False, False]]
>>> all([all(row) for row in array2)
False # This is correct but this and array with all True is only working case.

对于array1 = [[True, False], [False, False]],我希望输出为True,因为True处有一个array1[0][0]

3 个答案:

答案 0 :(得分:2)

ENOENT

此答案正在使用生成器,因此它将在找到第一个True值时返回,而不会遍历整个矩阵。此外,它将使用O(1)空间

编辑:删除了不必要的代码

答案 1 :(得分:0)

使用any()代替all()。如果可迭代对象中的所有项目均为true,则all()返回true。 any()如果​​可迭代对象中的任何项目为true,则返回True。

答案 2 :(得分:0)

一种更短的方法是使用itertools.chain将列表链接在一起并在其上应用any

from itertools import chain

def has_true(arr):
    return any(chain(*arr))

print(has_true([[True, False], [False, False]]))
print(has_true([[False, False], [False, False]]))

输出将为

True
False