【问题标题】:Test if all elements of a python list are False测试 python 列表的所有元素是否为 False
【发布时间】:2015-09-14 23:09:29
【问题描述】:

由于所有元素都是“假”,如何返回“假”?

给定的列表是:

data = [False, False, False]

【问题讨论】:

    标签: python list numpy


    【解决方案1】:

    使用any

    >>> data = [False, False, False]
    >>> not any(data)
    True
    

    any 将返回 True 如果迭代中有任何真值。

    【讨论】:

    • @Ajay,使用allall(not x for x in data)
    • 注意:如果您在数组中包含非布尔数据,这将不起作用。
    • @HaroldSeefeld,试试not any([0, 0, 0])
    • @HaroldSeefeld 会的,python 可以测试所有内置类型的真实性
    • 0, [], {},()..etc 都是 False 非布尔数据..:)
    【解决方案2】:

    基本上有两个函数处理可迭代对象并根据序列中元素的布尔值计算结果返回 True 或 False。

    1. 如果iterable 的所有元素都被视为真值(如reduce(operator.and_, iterable)),则all(iterable) 返回True。

    2. 如果iterable 的至少一个元素为真值,any(iterable) 返回 True(同样,使用函数式的东西,reduce(operator.or_, iterable))。

    使用all 函数,您可以将operator.not_ 映射到您的列表上,或者只使用否定值构建一个新序列并检查新序列的所有元素是否为真:

    >>> all(not element for element in data)
    

    使用any 函数,您可以检查至少一个元素是否为真,然后否定结果,因为如果有一个真元素,您需要返回False

    >>> not any(data)
    

    根据德摩根定律,这两个变体将返回相同的结果,但我更喜欢最后一个(使用any),因为它更短,更易读(并且可以直观地理解为“没有” t 数据中的真正价值”)并且更高效(因为您没有构建任何额外的序列)。

    【讨论】:

    • any() 解决方案将在找到 True 值后立即停止,因此通常会更快。
    【解决方案3】:

    这是使用生成器表达式的另一种方法:

    data = [False, False, False]
    try:
        out = next(elt for elt in data if elt) # holds the value of first non-empty element
    except StopIteration:
        print("all elements are empty")
    
    data = [[], [], [1], [2]]
    try:
        out = next(elt for elt in data if elt) # [1]
    except StopIteration:
        print("all elements are empty")
    

    【讨论】:

      【解决方案4】:

      我们都知道False也被认为是0,所以如果所有元素中的sum0,这意味着列表中的所有元素都是False
      但既然你想要:

      返回'false',因为所有元素都是'false'

      为此,请使用否定运算符not!

      data = [False, False, False]
      print(sum(data)!=0) #False
      

      【讨论】:

        【解决方案5】:

        True 和 False 是 0 和 1 的布尔表示。 True = 1 和 Flase = 0

        data = [False, False, False]    
        if sum(data)== 0:
           return False
        if sum(data) == len(data):
           return True
        

        sum(data) 表示将 1 和 0 加上一个列表中的 True(1) 和 False(0) 各自的值。

        全为False的情况下总和为0, 并且在 all True 的情况下,总和 等于列表的长度。 除 0 和 1 以外的任何总和值都表示并非全部为 False 或 True。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-10
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多