我正在尝试编写代码,以检查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]
。
答案 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