为.布尔列表实现.all()?

sta*_*tti 0 python boolean list

Numpy .all()对布尔数组有一个很好的方法,可以测试所有值是否为真.我想做同样的事情而不给我的项目添加numpy.标准库中有类似的东西吗?否则,你会如何实现它?

我当然可以想到明显的方法:

def all_true(list_of_booleans):
    for v in list_of_booleans:
        if not v:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式,也许是单线?

Mar*_*ers 5

有; all()令人惊讶的是它被称为.它是实现准确按照您的描述实现,尽管在C中.引用文档:

返回True如果的所有元素迭代是真实的(或者如果可迭代为空).相当于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

版本2.5中的新功能.

这不仅限于布尔值.请注意,这需要迭代 ; 传入生成器表达式意味着只需要评估足够的生成器表达式来测试假设:

>>> from itertools import count
>>> c = count()
>>> all(i < 10 for i in c)
False
>>> next(c)
11
Run Code Online (Sandbox Code Playgroud)

还有一个等效的any()功能.