Этот вопрос для удовольствия; Я не ожидаю, что ответ будет полезен.
Когда я вижу, что люди делают вещи с reduce() в Python, они часто используют встроенную функцию в Python, часто из модуля operator.
Это работает:
result = reduce(lambda a, b: a + b, range(5))
Но обычно вы увидите следующее:
from operator import add
result = reduce(add, range(5))
Что странно для меня, что модуль operator, похоже, не имеет функции для логического and. Он имеет побитовое и, но не логическое and.
Предположим, вы это делаете:
result = reduce(lambda a, b: a and b, range(1, 6))
Есть ли встроенная функция, которая может быть использована здесь?
Мне также интересно, есть ли встроенная функция, которая может заменить or.
Если вы сначала сопоставляете аргументы с Booleans, вы можете использовать побитовое и от operator или просто использовать bool.__and__, например:
from operator import and_
result = reduce(and_, map(bool, range(1, 6)))
result = reduce(bool.__and__, map(bool, range(1, 6)))
И аналогично с operator.or_() или bool.__or__ для операции or. Но я ищу функцию, которая не нуждается в значениях, сопоставленных с Booleans.
Если бы вы знали наверняка, что ваши значения являются целыми числами, вы можете использовать operator.mul для and и operator.add для or. Это было бы грубым взломом, и я не хочу этого ответа... особенно учитывая, насколько дорого будут умножаться, если бы встретилось много чисел, и ни один из них не был равен нулю!
Примечание. Я знаю all() и any(), которые являются лучшими заменами для этого использования reduce(). Как я сказал наверху, я прошу это для удовольствия.
Примечание. Функция, которая имеет побочный эффект форсирования всех значений до bool, будет приемлемым ответом. Встроенное ключевое слово and не делает этого:
x = 3 and 5 # sets x to 5, not to True
Но для этого вопроса меня интересует только функция, которая может работать с reduce() для выполнения логических операций and или or.