【发布时间】:2021-10-30 15:59:44
【问题描述】:
我正在尝试使用递归遍历列表并将其所有非列表元素和子列表的元素附加到唯一列表。
def refr(a_list):
loo = []
for item in a_list:
if isinstance(item, list):
refr(item)
else:
loo.append(item)
return loo
print(refr([1, ['no', 'ok'], 'dang', 0]))
当我将 loo 定义为局部变量时,它只包含输入列表中不代表列表的元素。
# output
[1, 'dang', 0]
但是当定义为全局时,输出是正确的
# output
[1, 'no', 'ok', 'dang', 0]
为什么会这样?
【问题讨论】:
-
这能回答你的问题吗? Flatten an irregular list of lists
-
@schwobaseggl 如果有重复,应该更符合“为什么递归调用的值被丢弃?”;这里的错误是没有使用递归调用
refr(item)的返回值。除此之外,OP 似乎已经理解了如何遍历不规则列表的基本思想,并关闭他们的问题以将他们引荐给该列表不会有任何帮助。 -
@Stef True,这就是我的回答。顺便说一句,您可以添加更好的副本。字面上有几十个问题,比如“为什么递归函数返回 None”,而且总是这个问题。
-
@schwobaseggl 是的,我确实赞成您的回答。 “为什么递归函数返回 None”是我的第一直觉,但实际上,OP 的函数不返回 None。它总是返回一个列表;该列表只是省略了在递归调用期间计算的一些值。
-
是的,骗子不必那么精确。我的链接骗子的答案和任何“递归无”问题的答案都将包含 OP 解决问题所需的所有信息。
标签: python python-3.x recursion