在Python中打印列表的非递归方法
有没有办法以非递归的方式来完成以下操作:
my_list = [
"level 1-1",
"level 1-2",
"level 1-3",
[
"level 2-1",
"level 2-2",
"level 2-3",
[
"level 3-1",
"level 3-2"
]
],
"level 1-4",
"level 1-5"
]
def print_list(the_list, indent_level=0):
for item in the_list:
if isinstance(item, list):
print_list(item, indent_level + 1)
else:
print "\t" * indent_level, item
print_list(my_list)
5 个回答
2
这是马丁·洛维斯版本的一个变种,它使用了 for/else
结构,而不是手动捕捉 StopIteration
,同时用 len(stack)
来代替跟踪缩进级别。
def print_list(the_list):
stack = [iter(the_list)]
while stack:
for item in stack[-1]:
if isinstance(item, (list, tuple)):
stack.append(iter(item))
break
else:
print '\t' * (len(stack)-1), item
else:
stack.pop()
2
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是因为我们使用的工具和环境设置不对。解决这些问题的第一步就是要仔细检查代码,看看有没有拼写错误、漏掉的符号或者逻辑上的问题。
另外,了解你使用的编程语言和工具的基本知识也很重要。这样可以帮助你更快地找到问题所在。如果你不确定某个功能是怎么用的,可以查阅相关的文档或者在网上搜索一下,通常会找到很多有用的信息。
最后,记得多和其他程序员交流,分享你的问题和解决方案。这样不仅能帮助你更快地解决问题,还能让你学到更多的知识。
def print_list(the_list, indent_level=0):
stack = [iter(the_list)]
while stack:
try:
item = stack[-1].next()
except StopIteration:
stack.pop()
indent_level -= 1
continue
if isinstance(item, list):
indent_level += 1
stack.append(iter(item))
else:
print "\t" * indent_level, item
4
在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后在另一个地方使用这些信息。这个过程就像是把水从一个桶倒到另一个桶。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们需要对数据进行一些处理才能使用。这就像是我们需要先把水过滤一下,才能倒进另一个桶。
在这个过程中,我们可能会使用一些工具或者方法来帮助我们完成任务。这些工具就像是我们用来过滤水的网子,能够让我们更方便地处理数据。
总之,编程就像是在做一些搬运和处理数据的工作,虽然有时候会遇到困难,但只要找到合适的方法,就能顺利完成任务。
stack = [(my_list, -1)]
while stack:
item, level = stack.pop()
if isinstance(item, list):
for i in reversed(item):
stack.append((i, level+1))
else:
print "\t" * level, item