将无限列表解析为一个列表

时间:2018-06-07 07:03:21

标签: python-3.x list multidimensional-array

我有使用递归构建代码的任务。任务是列出一个列表,其中可以包含无限量的列表并将其列为一个列表。

到目前为止,我所拥有的是:

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完成它将真正教育我。 :) 谢谢你的回答

2 个答案:

答案 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