如何将项目递归添加到列表?

时间:2019-09-30 20:37:09

标签: python arrays list recursion

当前,我正在研究一个问题。我得到一个列表,其元素可以包含其他列表,列表列表或整数。例如,我可能会收到:

[[[[], 1, []], 2, [[], 3, []]], 4, [[[], 5, []], 6, [[], 7, [[], 9, []]]]]

我的目标是解析数组,并将仅整数附加到新列表中。到目前为止,这是我所做的:

def fun(a):
    if a == []:
        return None
    elif type(a) == int:
        print("Found a digit: ", a)
        return a
    for i in a:
        fun(i)

当前,此函数递归地遍历列表并成功找到每个整数;现在,我在将这些整数附加到新列表中并在最后返回该列表时遇到了问题。输出应如下所示:

[1,2,3,4,5,6,7,9]

有指针吗?

2 个答案:

答案 0 :(得分:5)

将要附加的列表作为参数传递。

def fun(a, result):
    if type(a) == int:
        print("Found a digit: ", a)
        result.append(a)
    else:
        for i in a:
            fun(i, result)
old_list = [[[[], 1, []], 2, [[], 3, []]], 4, [[[], 5, []], 6, [[], 7, [[], 9, []]]]]
new_list = []
fun(old_list, new_list)
print(new_list)

如果需要原始功能签名,可以将其分为两个功能。

def fun(a):
    result = []
    fun_recursive(a, result)
    return result

fun_recursive()的定义如上。

答案 1 :(得分:4)

您可以尝试:

def fun(a):
    if isinstance(a, int):
        yield a
    else:
        for e in a:
            yield from fun(e)

print(list(fun([[[[], 1, []], 2, [[], 3, []]], 4, [[[], 5, []], 6, [[], 7, [[], 9, []]]]])))

输出:

[1, 2, 3, 4, 5, 6, 7, 9]