【问题标题】:Lists in recursive function递归函数中的列表
【发布时间】:2017-01-26 11:56:43
【问题描述】:

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

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

【问题讨论】:

    标签: python list recursion


    【解决方案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
    

    【讨论】:

    • 非常感谢,还是不明白为什么会这样。将尝试查找信息。
    【解决方案2】:

    你正在调用你的内部函数,但你没有使用它的输出。你可能应该

     if len(some_list)>1:
         return my_function(some_list)
    

    【讨论】:

      【解决方案3】:

      其他人已经解决了您当前实施的具体问题。我发布此答案只是为了提供一种替代方法,以实现您在列表中递归求和相邻元素的目标,您可能会发现它更清晰一些。

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

      输出

      [3, 5, 7, 9]
      [8, 12, 16]
      [20, 28]
      [48]
      Result:  48
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        • 2015-04-19
        相关资源
        最近更新 更多