Подтвердить что ты не робот

Проверьте, оценивает ли предикат true для всех элементов в итерабельном в 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);

Как это делается "pythonic" в python?

Также было бы здорово, если бы я мог получить ответ для этого:

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

Ответ 1

Вы имеете в виду что-то вроде:

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

Ответ 2

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

Ответ 3

Вот пример, который проверяет, содержит ли список все нули:

x = [0, 0, 0]
all(map(lambda v: v==0, x))
# Evaluates to True

x = [0, 1, 0]
all(map(lambda v: v==0, x))
# Evaluates to False

Альтернатива, которую вы также можете сделать:

all(v == 0 for v in x)

Ответ 4

Вы можете использовать встроенные функции "все" и "любые" в python

all(map(somePredicate, somIterable))

здесь somePredicate - это функция и 'all' будет проверять, является ли bool() этого элемента True