有没有办法以非递归方式执行以下操作:
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)发布于 2009-07-22 07:07:22
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发布于 2009-07-22 07:05:20
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发布于 2009-07-22 11:58:11
这是Martin Löwis版本的一个变体,它使用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()https://stackoverflow.com/questions/1163429
复制相似问题