gpt4 book ai didi

python - 列表中的递归

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

def obsah(myList):
def recursion(myList,deep=1,result=(None)):
if type(myList) == list:
for i in range(len(myList)):
if type(myList[i]) == list:
deep+=1
recursion(myList[i],deep,result)
else:
result = (deep,myList[i])
break
else:
result = (0,myList)
return result
return recursion(myList)

这个函数应该返回递归的部门和列表中最后一个元素的值作为元组:

 obsah(['a'])
(1, 'a')
>>> obsah([[123]])
(2, 123)
>>> obsah([[[[[(3,7)]]]]])
(5, (3, 7))
>>> obsah(3.14)
(0, 3.14)
>>> obsah([[[1],2]])
(1, None)

instead the outputs are:

(1, 'a')
None
None
(0, 3.14)
None

经过多次测试,我发现我的临时结果是好的,但是,递归又进行了一次默认参数(无),问题在哪里?它不应该以那个返回结束吗?

最佳答案

首先,题外话:

而不是这样写:

for i in range(len(myList)):
myList[i]

这样写:

for element in myList:

或者,如果需要的话:

for i, element in enumerate(myList):

那么,你的代码...

当我们编写递归函数时,我们想要非常明确地讨论两种类型的情况。基本情况和递归情况。我们应该能够在我们的代码中将它们建模为非常明确的样式。

在您的代码中,您确实没有遵循该模型。我真的找不到基本案例。让我们谈谈基本情况:

  1. 如果传递给递归函数的对象不是list类型,那么我们返回当前深度和传入的对象。
  2. 如果传递给递归函数的列表的长度不是 1,那么我们返回当前深度和None

我们的递归案例是增加深度并将 myList[0] 传递给递归调用。

所以你的代码应该相当简单:

def obsah(myList):
return recursion(myList)

def recursion(myList, depth=0):
# Base Case
if type(myList) != list:
return (depth, myList)

# Another Base Case:
if len(myList) != 1:
return (depth, None)

# Iterative case
return recursion(myList[0], depth+1)

print obsah(['a'])
print obsah([[123]])
print obsah([[[[[(3,7)]]]]])
print obsah(3.14)
print obsah([[[1],2]])

哪些输出:

(1, 'a')
(2, 123)
(5, (3, 7))
(0, 3.14)
(1, None)

记住:

这里的关键是在开始编写实际代码之前写下基本情况和递归情况。

关于python - 列表中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684396/

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