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