【问题标题】:parsing infinite list into one list将无限列表解析为一个列表
【发布时间】:2018-11-16 23:49:54
【问题描述】:

我的任务是使用递归构建代码。任务是获取一个可以在其中包含无限数量列表的列表并将其变成一个列表。

这是我目前所拥有的:

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

【问题讨论】:

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


    【解决方案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. 否则以子列表为参数递归调用函数,直到整个列表被展平。

    【讨论】:

    • 如果是这样,您能否使用分数面板下的绿色复选标记将答案选择为“已接受”,该面板位于答案帖子旁边?
    • 现在我明白了,非常感谢,使用 numpy 是否更短?
    • 通常你会看到“最好的”代码不是短的,而是可读的。
    • 我会选择它,只是等待选项在几分钟后打开
    【解决方案2】:

    我建议你以下建议:它遍历列表,如果遇到的项目是一个列表,那么它在将其附加到结果扁平列表之前递归地扁平化它:

    def flat_list(aList):
        result = []
        for i in aList:
            if isinstance(i, list):
                result += flat_list(i)
            else:
                result.append(i)
        return result
    

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多