Python 如何突破递归函数?

Python 如何突破递归函数?,python,recursion,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)

我有一个递归函数,其中我试图将嵌套列表的列表展平。我想在找到整数后立即停止递归函数。一个示例列表是:
[[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

如何让它在找到int后立即停止?

如果要将结果传播到备份,请在该点返回

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

def展平(arr):
对于arr中的元素:
如果isinstance(elem,collections.Iterable)而不是isinstance(elem,(str,bytes)):
res=展平(elem)
如果res不是None:#如果要返回第一个,请添加此项
打破
其他:
如果不存在(元素、浮动):
返回元素
返回res

如果要将结果传播到备份,只需在该点返回

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

def展平(arr):
对于arr中的元素:
如果isinstance(elem,collections.Iterable)而不是isinstance(elem,(str,bytes)):
res=展平(elem)
如果res不是None:#如果要返回第一个,请添加此项
打破
其他:
如果不存在(元素、浮动):
返回元素
返回res

使用“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

使用“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

你的代码有点不对劲,但我能猜出你想做什么

 return flatten(elem)
flatte()将在找不到整数时调用flatte()本身
它的返回值模拟如下:

  if not isinstance(elem, int):
      return elem
1(第一轮)。--->返回平坦()

  • ----------------->返回(返回展平())

  • ----------------->return(return(return flatten())

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

    为了使3的返回flatte()到4的intFOund

    您需要返回带整数的flatte()函数,如下所示:

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

  • 最后,您的urintFound从函数中返回

    您的代码有点小错误,但我可以猜出您想做什么

     return flatten(elem)
    
    flatte()将在找不到整数时调用flatte()本身
    它的返回值模拟如下:

      if not isinstance(elem, int):
          return elem
    
    1(第一轮)。--->返回平坦()

  • ----------------->返回(返回展平())

  • ----------------->return(return(return flatten())

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

    为了使3的返回flatte()到4的intFOund

    您需要返回带整数的flatte()函数,如下所示:

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

  • 最后,您让urintFound返回函数

    停止for循环,只需使用一个中断,代码如下所示:

    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,只需返回函数。

    要停止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,您只需返回函数。

    所说的“停止”,是指放弃结果还是其他什么?请解释你希望发生什么。此外,您说您希望在找到整数时停止,但您的代码表明您希望在找到整数以外的其他内容时停止。所谓“停止”,您的意思是放弃结果还是其他什么?请解释你希望发生什么。另外,当您找到一个整数时,您说您想停止,但您的代码表明当您找到一个非整数时,您想停止。