如何控制此列表打印功能的格式

时间:2013-06-04 08:45:33

标签: python python-3.x

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

我的功能的预期结果应该是:

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)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

最后一个小错误:当'each_item'是一个列表时,你的代码会增加级别变量,但之后不会减少它。因此,当您在列表末尾添加新项目时,缩进将是错误的,只需将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)

答案 2 :(得分:0)

只需将方法调用为

即可
printList(testlist,0)