【问题标题】:How to return True if two-dimensional array in python has at least one True如果python中的二维数组至少有一个True,如何返回True
【发布时间】:2019-05-05 07:34:03
【问题描述】:

我正在尝试编写一个代码来检查二维数组(仅由布尔值组成)是否至少有一个 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,因为array1[0][0] 处有一个True

【问题讨论】:

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


    【解决方案1】:
    def has_true(arr):
        return any(any(row) for row in arr)
    
    In [7]: array1 = [[True, False], [False, False]]
    
    In [8]: array2 = [[False, False], [False, False]]
    
    In [9]: has_true(array1)
    Out[9]: True
    
    In [10]: has_true(array2)
    Out[10]: False
    

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

    编辑:删除不必要的代码

    【讨论】:

    • 谢谢!这是我看到你的代码后想到的; any([any(row) for row in array])。如果您能告诉我这是另一种方式,那就太好了。
    • 我会编辑我的帖子,你的方法是正确的,但它应该使用生成器
    【解决方案2】:

    使用 any() 而不是 all()。 all() 如果可迭代对象中的所有项都为真,则返回真。 any() 如果可迭代对象中的任何项为真,则返回 True。

    【讨论】:

      【解决方案3】:

      更短的方法是使用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
      

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 2021-02-21
        • 1970-01-01
        • 2020-01-20
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        相关资源
        最近更新 更多