串联返回的元素以在递归函数中列出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串联返回的元素以在递归函数中列出相关的知识,希望对你有一定的参考价值。

这已经让我头疼了很长时间

我正在尝试通过递归创建一个元组列表,但是我无法弄清楚我如何实现此目标。下面,foo()和A是更复杂的方法和结构的别名,但是我想在下面的foo()返回以下内容:

[((0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7) ,(8,8)]

第一次尝试

[当我尝试将它们作为列表添加在一起时,它会将所有列表嵌套。

A = [(num, num) for num in np.arange(9)]
def foo(A):

    if len(A)==1:
        return(A[0])
    else:
        return([A[0]] + [foo(A[1:])])
print(foo(A))

输出:[(0,0),[(1,1),[(2,2),[(3,3),[(4,4),[(5,5),[(6, 6),[(7,7),(8,8)]]]]]]]]]]

第二次尝试

我可以理解为什么这是错误的,所以我尝试将返回的值附加到更高级别的列表中,但没有任何返回:

A = [(num, num) for num in np.arange(9)]
def foo(A):

    if len(A)==1:
        return(A[0])
    else:
        return([A[0]].append(foo(A[1:])))
print(foo(A))

输出:无

当前解决方案(必须有更好的方法)

def foo(A):

    if len(A)==1:
        return(A[0])
    else:
        return(A[0] + foo(A[1:]))

输出:(0,0,1,1,2,2,3,3,4,4,5,5,5,6,6,7,7,8,8]

...然后:

temp = np.array(foo(A)).reshape(-1,2)
output = [tuple(temp[i, :]) for i in range(np.shape(temp)[0])]
print(output)

给出所需的输出...有人可以提供一些有关如何使用递归正确执行此操作的建议吗?

答案

您几乎在第一次尝试时就拥有了它。通过添加一个包装并更改您的原始基本包装,我们可以获得您想要的结果。

def foo(A):

    if len(A)==1:
        return([A[0]])
    else:
        return([A[0]] + [*foo(A[1:])])
print(foo(A))`
另一答案

我不确定您要什么,因为A已经是您想要的结构。但是,第一次尝试时,您搞砸了返回类型。第一个if返回一个数字,但是第二个if返回一个列表。因此,请确保第一个if返回一个列表,并删除第二个if中的列表转换。应该是这样的:

import numpy as np

A = [(num, num) for num in np.arange(9)]
def foo(A):

    if len(A)==1:
        return([A[0]])
    else:
        return([A[0]] + foo(A[1:]))
print(foo(A))

以上是关于串联返回的元素以在递归函数中列出的主要内容,如果未能解决你的问题,请参考以下文章

用于递归展平结果的 JS 数组串联

递归向量返回

不使用反向返回列表中最后一个元素的非尾递归函数?

从片段访问数据库以在列表中显示

嵌套for循环以在Python中递归

返回函数调用与仅在递归期间再次调用函数有啥区别?