Python使用递归遍历带条件的嵌套列表

时间:2018-09-14 00:57:14

标签: python recursion

假设我有以下内容:

def foo(lst):
  current = 0
  if(len(lst) == 0):
    return current
  first = bar(lst[0])
  rest = foo(lst[1:])
  if(first > current):
    current = first
  return current

if __name__ == "__main__":
  lst1 = [2,4,6]
  lst2 = [0,2,5,6,12]
  lst3 = []
  lst4 = [1]
  lst5 = [2]
  full_lst = [lst1, lst2, lst3, lst4, lst5]
  print(foo(full_lst))

此函数将上述结构中的嵌套列表作为参数。该函数的目标是递归地遍历此嵌套列表结构,并将计算应用于每个列表。该功能还可以跟踪每次计算,并最终返回从这些计算中获得的最大这些值。

我相信我已经完成一些基本结构,但是我看不到如何在较小的子列表上使用函数调用,并将从该函数获得的值与从上一个函数调用获得的值进行比较。

谢谢。

2 个答案:

答案 0 :(得分:0)

bar = len

def foo(lst):
    if lst:
        last = lst.pop()
        return max(foo(lst), bar(last))
    else:
        return float('-inf')

if __name__ == "__main__":
    lst1 = [2,4,6]
    lst2 = [0,2,5,6,12]
    lst3 = []
    lst4 = [1]
    lst5 = [2]
    full_lst = [lst1, lst2, lst3, lst4, lst5]
    print(foo([]), foo(full_lst))

# prints '-inf 5'

答案 1 :(得分:0)

递归很有趣。专注于这两件事:

  1. 如果答案很简单,请返回!

    递归在哪里结束? 通常有一些基础,例如“如果该值输入,则该值输出。”

  2. 如果答案不简单:

    • 分成几部分
    • 问自己零件的答案
    • 将零件重组为结果

因此,实际上只是要确定循环的结束位置以及如何划分/组合这些部分。

在示例中,您有终点,但没有使用“其余”。