【发布时间】:2019-12-04 09:00:59
【问题描述】:
我需要编写一个递归函数,它从原始列表返回一个列表,其中每个元素都由该级别的元素组成。例如[1, [2, [3], [[4], 3], 2], 1, []] 该列表的结果应该是[[1, 1], [2, 2], [3, 3], [4]](元素 1、1 在级别 1,元素 2、2 在级别 2 等)。另一个例子是[8, [6, 7, [-1], [4, [[10]]], 2], 1] 变成[[8, 1], [6, 7, 2], [-1, 4], [], [10]]。我试图遍历每个元素,当它不是列表时,将元素添加到结果中。否则我再次调用该函数,直到我再次到达一个元素。但问题是它只是将所有元素添加到结果中。我被卡住了,真的不知道如何继续。
def levels(x, level = 0, result = []):
for element in x:
if type(element) is not list:
result.append(element)
else:
levels(element, level + 1, result)
return result
print(levels([1, [2, [3], [[4], 3], 2], 1, []]))
print(levels([8, [6, 7, [-1], [4, [[10]]], 2], 1]))
我的结果:
[1, 2, 3, 4, 3, 2, 1]
[1, 2, 3, 4, 3, 2, 1, 8, 6, 7, -1, 4, 10, 2, 1]
应该是什么:
[[1, 1], [2, 2], [3, 3], [4]]
[[8, 1], [6, 7, 2], [-1, 4], [], [10]]
非常感谢任何帮助。
【问题讨论】:
-
Idk 如果这是您的问题,但您绝对应该修复
result = []参数。见here。不要将可变对象作为默认参数,除非你从不改变它。