漂亮打印列表使用递归返回列表中的单个项目

时间:2014-07-21 04:59:25

标签: python python-3.x recursion

我正在编写一个代码,以“漂亮”的顺序返回列表中的每个项目。我试图在不使用任何内置模块或方法的情况下执行此操作。这不是作业,因为我正在练习和改进我的编码技巧。我遇到的问题是该函数只返回一个项目,而不是列表中的每个元素。我用新行字符分隔列表中的每个项目。如果列表有一个嵌套列表,我将把嵌套列表中的项缩进2个空格。任何帮助将不胜感激:)

def pretty_print(item_list, indentation = ""):

        if len(item_list) == 0:
            return " "

        for items in item_list:

            if isinstance(items, list):
                return pretty_print(items, indentation = "  ")

        return (items + '\n')

3 个答案:

答案 0 :(得分:2)

我猜你需要返回一个字符串。这是您需要在程序中进行的最小更改才能使其正常工作。请记住,返回值必须通过递归调用保持一致。

def pretty_print(item_list, indentation = ""):

        temp = []
        for items in item_list:
            if isinstance(items, list):
                temp.append( pretty_print(items, indentation = indentation+"  "))
            else:
                temp.append( indentation + str(items) + '\n')

        return ( ''.join(temp ) )

编辑:

在我的程序执行中,第一个元素没有缩进。我更改了indentation字符串,因此在以下程序中很容易看到:

def pretty_print(item_list, indentation = ""):

        temp = []

        for items in item_list:
            if isinstance(items, list):
                temp.append( pretty_print(items, indentation = indentation+"[----]"))
            else:
                temp.append( indentation + str(items) + '\n')

        return ( ''.join(temp ) )


print pretty_print( [1,2,3,[1,2,3], 1,[1,2,[1,2, ['a', 'this is outer'],3], 3], 2,3] )

答案是:

1
2
3
[----]1
[----]2
[----]3
1
[----]1
[----]2
[----][----]1
[----][----]2
[----][----][----]a
[----][----][----]this is outer
[----][----]3
[----]3
2
3

我是直接从iPython窗口复制它....第一级不应该有任何缩进。

答案 1 :(得分:0)

这是一个更加清晰的“pythonistic”中的清洁版本。方式:

INDENTATION = '  '

def pretty_print(item_list, depth=0):
    for items in item_list:
        if isinstance(items, list):
            pretty_print(items, depth + 1)
        else:
            print (INDENTATION * depth) + str(items)

答案 2 :(得分:0)

for循环对初学者有帮助。

def pretty_print(l, indentation=""):
    if isinstance(l,list):
        print (indentation+"[")
        for i in l:
            pretty_print(i, indentation=indentation+"  ")
        print (indentation+"]")
    else:
        print (indentation+repr(l))