Python:打印递归列表



我有这两个测试用例:

calc1 = [['print', 5]] # 5
calc2 = [['print', 2], ['print', 4], ['print', 8]] # 2 4 8

我可以用这个函数正确地打印它们:

def exec_program(p):
    if len(p) == 1:
        print(p[0][1])
    else:
        for i in p:
            print(i[1])
print(exec_program(calc2))
>>> 2
>>> 4
>>> 8

但是我如何递归地解决这个问题呢?calc中的项数可以是1或多个。感谢所有的帮助

编辑:我现在的尝试。寻找解决方案

def exec_program(p):
    if len(p) == 1:
        print(p[0][1])
    else:
        print(exec_program[1:] - 1)
def do_print(calc):
    if not calc:
       return
    if calc[0] == 'print':
        print(calc[1])
    else:
        for subcalc in calc:
            do_print(subcalc)

对于任何深度的嵌套列表都有效。

你会想要在输入上添加一些错误检查,最好使用一些更严格的数据结构,如NamedTuple

您可以在打印完一个元素后从下一个元素开始分割列表,例如:

calc2 = [['print', 2], ['print', 4], ['print', 8]]
def print_me(calc2):
    if not calc2:
       return     #once calc2 is empty, we stop the recursion.
     print(calc2[0][1])
     return print_me(calc2[1::])
print_me(calc2)

最新更新