我想要一个可以打印内部列表的打印功能。
我的功能的预期结果应该是:
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)
答案 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)