如何突破递归函数?

时间:2019-08-14 01:25:06

标签: python recursion

我有一个递归函数,在这里我试图展平嵌套列表的列表。我想在找到整数后立即停止递归函数。列表示例为:[[[1.2, 2.3, 3.3], [4.3, [[5]]]], 6.3]

def flatten(arr):
    for elem in arr:
        if isinstance(elem, collections.Iterable) and not isinstance(elem, (str, bytes)):
            return flatten(elem)
        else:
            if not isinstance(elem, float):
                # break out of the recursion

一旦找到一个整数,如何使它停止?

4 个答案:

答案 0 :(得分:1)

此时,如果您想将结果传播回去,就dates.df %>% mutate(date.prime = pmax(as.Date("2019-01-04"), date))

例如,如果要返回找到的第一个非浮点数:

return

答案 1 :(得分:1)

要停止for循环,只需使用 break ,代码如下:

def flatten(arr):
for elem in arr:
    if isinstance(elem, collections.Iterable) and not isinstance(elem, (str, bytes)):
        return flatten(elem)
    else:
        if not isinstance(elem, int):
            break

除了使用break之外,您还可以返回该函数。

答案 2 :(得分:0)

使用“ break”语句。

def flatten(arr):
    for elem in arr:
        if isinstance(elem, collections.Iterable) and not isinstance(elem, (str, bytes)):
            return flatten(elem)
        else:
            if not isinstance(elem, int):
                # break out of the recursion
                break

答案 3 :(得分:0)

您的代码没有什么用,但是我可以猜到您正在尝试做什么

 return flatten(elem)

flatten()找不到整数时将调用flatten()本身
它的返回值模拟将是这样的:

1(第一轮)。----> 返回flatten()

  1. -----------------> 返回(返回flatten())

  2. -----------------> 返回(返回(返回flatten()))

4.(找到整数)-> 返回(返回(intFound))

为了使3的 return flat()变为4的 intFOund

u需要返回带有整数的flatten()函数,如下所示:

  if not isinstance(elem, int):
      return elem
  1. -------------> 返回(intFound)

最后,您从功能中退出了 intFound