【问题标题】:Boolean value of a list列表的布尔值
【发布时间】:2015-01-21 05:23:59
【问题描述】:

我做了一个函数,结果是一个列表:

[3, 3, 3]

现在我需要返回一个布尔值。如果所有元素都是 2 或更高,我需要返回 True,否则我需要返回 false。在这种情况下,它将是:真。 (因为所有元素都是 3 和 3 > 2) 有什么代码可以快速做到这一点吗?

我尝试制作一个 FOR - 循环,例如:

for i in [3, 3, 3]: if i >= 2: return True else: return False

我认为这是正确的,但我想知道是否有更快的方法。

提前致谢!

【问题讨论】:

  • 请展示你的努力。
  • okej 我是新来的。这是我在这里的第一个问题。下次我会展示我的努力。谢谢你的建议。

标签: python list boolean counting


【解决方案1】:

创建一个产生布尔值的generator(此处为generator expression)并将其传递给all function

>>> all(x >= 2 for x in [3, 3, 3])
True

我看到你发布了你的代码,它不正确,因为它只会检查列表的第一个元素。你可以修复它:

for i in your_list: 
    if i < 2: 
        return False # Return early
return True # if `i < 2` was False for all elements in the list, return True

【讨论】:

    【解决方案2】:
    a= [3, 3, 3]
    b=[elem for elem in a if elem > 2]  
    print (a==b)
    

    输出:真

    或者更简洁的方式

    a= [3, 3, 3]
    print([elem for elem in a if elem > 2]==a)  
    

    输出:真

    【讨论】:

    • 问题是关于一种更快的方法,而不是更慢和更复杂的方法。
    【解决方案3】:
    def areGreaterEqualThen2(lst):
        if lst:
            return lst[0] >= 2 and areGreaterEqualThen2(lst[1:])
        return True
    

    如果你必须定义自己的函数。

    这也是一个快速的解决方案,因为如果第一个条件为假,整个and 将返回假。

    【讨论】:

    • 没想到有人会用 Python 递归解决这个问题。
    • @Daniel 我最近做了很多 Haskell,所以这种心态一直困扰着我。
    猜你喜欢
    • 2012-10-11
    • 2012-04-08
    • 2021-03-15
    • 1970-01-01
    • 2020-11-11
    • 2018-02-19
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多