gpt4 book ai didi

python - 如何在此(简单的)python 程序中正确使用递归?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:25 25 4
gpt4 key购买 nike

伙计们,我写了一个函数来测试两个输入(a 和 b)是否具有相同的数据结构,这样:

print same_structure([1, 0, 1], [a, b, c])
#>>> True
#print same_structure([1, [0], 1], [2, 5, 3])
>>> False
#print same_structure([1, [2, [3, [4, 5]]]], ['a', ['b', ['c', ['d', 'e']]]])
>>> True
#print same_structure([1, [2, [3, [4, 5]]]], ['a', ['b', ['c', ['de']]]])
>>> False

此函数(在我的实现中)使用递归。我是递归的初学者,我仍然很难递归思考。此外,为了避免作弊,我想使用我自己的(凌乱的)代码并通过它学习使用递归调用(使用此代码行:'same_structure return(a [i],b [e])'正确).有人可以展示如何在下面的代码中正确使用递归吗?在此先感谢您的帮助!!!

def is_list(p):
return isinstance(p, list)

def same_structure(a,b):
if not is_list(a) and not is_list(b):
print '#1'
return True
else:
if is_list(a) and is_list(b):
print '#2'
if len(a) != len(b):
print '#3'
return False
if len(a) == len(b):
print '#4'
for e in range(len(a)):
print 'e = ', e, 'a[e]= ', a[e], 'b[e]=', b[e]
return same_structure(a[e], b[e])
else:
return False

最佳答案

以下作品:

def same_structure(a, b):
if isinstance(a, list) and isinstance(b, list) and len(a) == len(b):
return all(same_structure(A, B) for A, B in zip(a, b))
return (not isinstance(a, list) and not isinstance(b, list))

在编写递归函数时,您首先需要提出基本情况,您只需返回一个值而不是调用任何递归。这里的基本情况是以下条件之一:

  • a 是一个列表而 b 不是,反之亦然:返回 False
  • ab 都是列表,只是长度不同:return False
  • ab 都不是列表:返回 True

如果 ab 都是列表并且它们的长度相同,我们现在需要递归地检查这些列表的每个元素。 zip(a, b) 提供了一种方便的方法来迭代每个列表中的元素,如果 same_structure() 的结果对于任何两个子元素都是 False ,我们希望整个函数返回 False。这就是使用 all() 的原因,如果您不熟悉 all() 它等效于(但更有效)以下循环:

match = True
for A, B in zip(a, b):
if not same_structure(A, B):
match = False
break
return match

这是您可以在不做太多更改的情况下重写您的函数的方法,逻辑实际上与我的解决方案非常相似,但就在 print '#4' 下方,您过早地从该循环返回:

def same_structure(a,b):
if not is_list(a) and not is_list(b):
print '#1'
return True
else:
if is_list(a) and is_list(b):
print '#2'
if len(a) != len(b):
print '#3'
return False
if len(a) == len(b):
print '#4'
for e in range(len(a)):
print 'e = ', e, 'a[e]= ', a[e], 'b[e]=', b[e]
if not same_structure(a[e], b[e]):
return False
return True
else:
return False

关于python - 如何在此(简单的)python 程序中正确使用递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com