0

我想要一个可以打印内部列表的打印功能。

我的函数的预期结果应该是:

a
b
    aa
    bb
         aaa
         bbb

但是,现在的结果是:(添加的空间不是预期的)

a
b
        aa
        bb
            aaa
            bbb

我怎样才能得到预期的结果?我已经尽力而为,但未能找到解决方案。提前感谢任何帮助者。

testlist = ["a","b",["aa","bb",["aaa","bbb"]]]

add_space = False

def printList(the_list, level):

    global add_space

    for each_item in the_list:
        if isinstance(each_item, list):
            add_space = True
            level += 1
            printList(each_item, level)
        else:
            if add_space == True:
                for numbers in range(level):
                    print("\t",end="")
            print(each_item)


printList(testlist,1)
4

3 回答 3

3

使用递归方法。

testlist = ["a", "b", ["aa", "bb", ["aaa", "bbb"]]]

def recursive_list_print(lst, level=0):
    for item in lst:
        if isinstance(item, list):
            recursive_list_print(item, level+1)
        else:
            print('{}{}'.format('\t'*level, item))

recursive_list_print(testlist)

产量:

>>> 
a
b
    aa
    bb
        aaa
        bbb
于 2013-06-04T08:53:11.410 回答
1

当第一次调用 printList 是在级别 0 完成时(例如 printList(testlist, 0)),这里不需要全局状态(add_space 变量)。这简化了代码并使其更易于测试和调试。

当您将级别的打印语句添加到代码中时,您还会看到第一个列表项的级别最终为 2。

最后一个小错误:当 'each_item' 是一个列表时,您的代码会增加 level 变量,但之后不会减少它。因此,当您在列表末尾添加新项目时,缩进会出错,只需将 level+1 传递给 printList 的递归调用即可解决该问题。

结合所有这些:

testlist = ["a","b",["aa","bb",["aaa","bbb"]]]

def printList(the_list, level):

    for each_item in the_list:
        if isinstance(each_item, list):
            printList(each_item, level + 1)
        else:
            for numbers in range(level):
                print("\t",end="")
            print(each_item)


printList(testlist,0)
于 2013-06-04T09:03:00.323 回答
0

只需将该方法称为

printList(testlist,0)
于 2013-06-04T08:56:17.790 回答