递归函数列表

时间:2017-01-26 11:56:43

标签: python list recursion

我希望能够访问在递归时创建的列表,但我只能访问第一个列表。

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等等?

3 个答案:

答案 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]))