我正在尝试更好地学习递归,所以我一直在练习一些问题。
常见问题是将列表列表展平为单个列表。例如
[3,4,[1,2]] so the desired result will be [3,4,1,2].
我接近问题的方法是:
是2个元素a 列表 - 是的
再次调用该函数并再次进行测试
我的基本情况是,如果元素不是列表,则返回。
有更好的方法可以更好地理解递归吗?
答案 0 :(得分:3)
您的方法是正确的方向,但您不应该检查超过第一个元素。一般来说 - “纯粹的”递归解决方案只需要查看列表的“头部”(第一个元素)和“尾部”(list[1:]
)。
def flatten(l):
if len(l) == 0:
return []
if isinstance(l[0], list):
left = flatten(l[0])
else:
left = [l[0]]
return left + flatten(l[1:])
答案 1 :(得分:1)
你的例子肯定是有效的,但是你可能会对你的理解有点过于简单。我发现迷宫问题对我理解递归问题最有帮助。主要前言是有一个由两个不同值组成的2x2数组。一个值表示迷宫内的墙,另一个值表示空的空间。你的工作是使用递归遍历迷宫。这是一个示例问题和解决方案:
https://www.cs.bu.edu/teaching/alg/maze/
希望这会有所帮助!!
答案 2 :(得分:0)
你应该。
aList = [3,4,[1,2]]
def flatten(inList,outList):
for elem in inList:
if isinstance(elem,list):
flatten(elem,outList)
else:
outList.append(elem)
bList = list()
flatten(aList,bList)
print bList