我希望能够访问在递归时创建的列表,但我只能访问第一个列表。
my_data = [1,2,3,4,5]
def my_function (some_data):
some_list = []
for i in range(len(some_data)-1):
some_list.append(some_data[i+1]+some_data[i])
if len(some_list)>1:
my_function(some_list)
return some_list[0]
forty_eight = my_function(my_data)
所以我的想法是,在第一步中我得到每个邻居元素的总和,所以我得到[3,5,7,9],接着我得到[8,12,16],然后[20,28]和最后我得到了[48]。
因为最后一个列表有单个元素我想把它返回到名为" forst_eight"的变量,但问题是,这个变量等于3。这意味着在返回命令之后,程序使用我创建的第一个列表,而不是最后一个。 我做到四十八等于48等等?
答案 0 :(得分:1)
您忘记返回递归电话return my_function(some_list)
。这很重要,因为你一次又一次地调用my_function
,直到你的中断条件为真,但是你永远不会返回值,所以只有初始列表才真正使用。
my_data = [1,2,3,4,5]
def my_function (some_data):
some_list = []
for i in range(len(some_data)-1):
some_list.append(some_data[i+1]+some_data[i])
if len(some_list)>1:
return my_function(some_list)
return some_list[0]
forty_eight = my_function(my_data)
print forty_eight # >>> 48
答案 1 :(得分:1)
您正在调用内部函数,但您没有使用其输出。你可能应该
if len(some_list)>1:
return my_function(some_list)
答案 2 :(得分:0)
其他人已经解决了您当前实施的具体问题。我发布这个答案只是为了提供一种替代方法,以实现递归求和列表中相邻元素的目标,您可能会发现这些元素更清晰。
r'((\w+)[\)])'
<强>输出强>
def sum_reduce(l):
if len(l) == 1:
return l[0]
else:
summed_neighbours = [a + b for a, b in zip(l[:-1], l[1:])]
print(summed_neighbours)
return sum_reduce(summed_neighbours)
if __name__ == '__main__':
print('Result: ', sum_reduce([1,2,3,4,5]))