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