检查谓词是否为Python中的iterable中的所有元素计算为true

时间:2011-03-07 08:36:21

标签: python

我很确定有一个常见的习惯用法,但我找不到Google搜索...

这是我想要做的(用Java):

// Applies the predicate to all elements of the iterable, and returns
// true if all evaluated to true, otherwise false
boolean allTrue = Iterables.all(someIterable, somePredicate);

如何在Python中完成“Pythonic”?

如果我能得到这个答案也会很棒:

// Returns true if any of the elements return true for the predicate
boolean anyTrue = Iterables.any(someIterable, somePredicate);

4 个答案:

答案 0 :(得分:71)

你的意思是:

allTrue = all(somePredicate(elem) for elem in someIterable)
anyTrue = any(somePredicate(elem) for elem in someIterable)

答案 1 :(得分:7)

allTrue = all(map(predicate, iterable))
anyTrue = any(map(predicate, iterable))

答案 2 :(得分:1)

这是一个检查列表是否包含全零的示例:

all(v == 0 for v in x)

替代方案你也可以这样做:

unsigned int ReverseTetrads(unsigned int x)
{
    // reverse tetrads ignoring leading zeros
    x = (x << 16) | (x >> 16);
    x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff);
    x = ((x << 4) & 0xf0f0f0f0) | ((x >> 4) & 0x0f0f0f0f);

    // get rid of the leading zeros (which are now trailing zeros)
    x >>= !(x & 0x0000ffff) * 16;
    x >>= !(x & 0x000000ff) * 8;
    x >>= !(x & 0x0000000f) * 4;

    return x;
}

答案 3 :(得分:0)

你可以在Python中使用'all'和'any'内置函数:

all(map(somePredicate, somIterable))

此处somePredicate是一个函数,all将检查该元素的bool()是否为True。