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