如何首先执行嵌套列表

时间:2018-10-03 09:34:58

标签: python recursion nested

假设我有一个带有嵌套列表的列表以及一个“ NOT”和“ OR”的函数,如下所示:

def or_function(exp1, exp2):
    return exp1 or exp2

def not_function(exp): 
    return not exp

my_list = ["NOT", ["NOT", ["NOT", [False, "OR", ["NOT", False]]]]]

如何首先执行最里面的列表(["NOT", False]),然后再执行第二个最里面的列表([False, "OR", ["NOT", False]])等,以便最后返回False?我知道双重递归可能在这里有用,但我不知道如何实现。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

def evaluate(exp):
    if isinstance(exp, bool):  # base case: atomic bools
        return exp
    # ["NOT", whatever]
    if len(exp) == 2 and exp[0] == "NOT":
        # evaluate whatever and negate it!
        return not_function(evaluate(exp[1]))
    if len(exp) == 3 and exp[1] == "OR":
        return or_function(evaluate(exp[0]), evaluate(exp[2]))
    raise ValueError('unknown structure')

>>> my_list = ["NOT", ["NOT", ["NOT", [False, "OR", ["NOT", False]]]]]
>>> evaluate(my_list)
False

答案 1 :(得分:0)

如果您确信只会以这种方式获得输入,则可以尝试反转列表

my_list = reverse(my_list)

这将确保始终将最里面的列表["NOT", False]首先运行,并且始终将其始终放在列表的末尾