这个让我头疼太久了
我正在尝试从递归中创建一个元组列表,但我无法弄清楚我如何处理它是否会起作用。下面, 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, 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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句