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