我有使用递归构建代码的任务。任务是列出一个列表,其中可以包含无限量的列表并将其列为一个列表。
到目前为止,我所拥有的是:
def flat_list(array):
new_array =[]
for i in range(0,len(array)):
if len(str(array[i])) > 1:
flat_list(array[i:i+1])
else:
new_array += array[i:len(str(array))-1]
return new_array
这些是需要通过的测试:
assert flat_list([1, 2, 3]) == [1, 2, 3]
assert flat_list([1, [2, 2, 2], 4]) == [1, 2, 2, 2, 4]
assert flat_list([[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]) == [2, 4, 5, 6, 6, 6, 6, 6, 7]
assert flat_list([-1, [1, [-2], 1], -1]) == [-1, 1, -2, 1, -1]
我的回报:
flat_list([1, [2, 2, 2], 4])
my result: [1,[2,2,2],4]
right answer: [1,2,2,2,4]
我认为我的问题是在每个条目创建new_array的新局部变量,如何返回一个列表而不包含其他列表?
这个任务没有使用numpy,但是如果你也可以告诉我如何用numpy完成它将真正教育我。 :) 谢谢你的回答
答案 0 :(得分:1)
试试这个:
def flatten(S):
if S == []:
return S
if isinstance(S[0], list):
return flatten(S[0]) + flatten(S[1:])
return S[:1] + flatten(S[1:])
工作原理: 1.列表作为参数传递给递归函数以展平列表。 2.在函数中,如果列表为空,则返回列表。 3.否则,以子列表作为参数递归调用函数,直到整个列表被展平。
答案 1 :(得分:0)
我建议你提出以下建议:它遍历列表,如果遇到的项目是列表,那么它会在将其附加到生成的展平列表之前递归展平它:
def flat_list(aList):
result = []
for i in aList:
if isinstance(i, list):
result += flat_list(i)
else:
result.append(i)
return result