Python 递归布尔求值

Python 递归布尔求值,python,Python,假设我有这样的东西: [(True, False, False), True] = True 或 这可能是无限深的,元组被评估为OR和and 如何用python编写此函数?一个包含和的解决方案: 递归短路遍历函数。你试过什么吗?如果我理解正确,你想把X&Y写成[X,Y],把X | Y写成(X,Y)。这(依赖类型进行求值)并不是一种很好的Python方式。map在Python2.x中很受欢迎——您可以通过使用itertools.imap或expr中的e的生成器表达式evaluate\u bool

假设我有这样的东西:

[(True, False, False), True] = True

这可能是无限深的,元组被评估为OR和and

如何用python编写此函数?

一个包含和的解决方案:


递归短路遍历函数。你试过什么吗?如果我理解正确,你想把
X&Y
写成
[X,Y]
,把
X | Y
写成
(X,Y)
。这(依赖类型进行求值)并不是一种很好的Python方式。
map
在Python2.x中很受欢迎——您可以通过使用
itertools.imap
或expr中的e的生成器表达式
evaluate\u bool(e)来保持这种惰性。(在Python3.x中,
map
已经是惰性的。)@FrancisAvila您是对的,可以通过使用生成器表达式来改进此代码。谢谢
(False, [True, True, False], False) = False
def evaluate_bool(expr):
    if isinstance(expr, list):
        return all(evaluate_bool(e) for e in expr)
    elif isinstance(expr, tuple):
        return any(evaluate_bool(e) for e in expr)
    else:
        return expr

evaluate_bool([(True, False, False), True]) # True
evaluate_bool((False, [True, True, False], False)) # False