【发布时间】:2014-03-18 23:35:36
【问题描述】:
我对编程有点缺乏经验,对返回函数的工作原理有点困惑。我正在尝试编写一个将函数映射到嵌套列表元素的程序。变量级别表示列表中嵌套级别的次数。我目前可以通过打印我的最终映射列表 totlist 来让程序运行:
def map_nested(listbasket, function, levels): #listbasket is the list that contains lists
totlist=[] #this list will store the list after the function has been mapped to it
for listelement in listbasket:
if levels<=2: #once we get to the level that just contains a list of lists
newlist=list(map(function,listelement))
totlist.append(newlist) #add to final mapped list
else:
map_nested(listelement, function, levels-1) #recursively call for next level
print(totlist)
map_nested([[[1,2],[3,4]],[[5,6],[7,8]]], math.sqrt, 3) # my test function
相反,我想要返回 totlist 的东西,但我不知道该怎么做。每次我尝试返回它时,它只会返回一个空列表或列表的一部分。我觉得我已经尝试了我能想到的所有回报配置。
【问题讨论】:
-
您是否尝试将
print(totlist)替换为return totlist? -
您说它打印正确,如果您确实进行了替换,它将返回它正在打印的内容。您必须记住将该返回值分配给调用站点的变量并在那里打印出来。
-
我实际上已经尝试过了。它没有用。当我打印变量时,它打印了 []
-
哦,我明白你的意思了,最外面的调用打印也打印“[]”。根据您的描述,我认为您说的是正确的。由于递归性质,您必须将递归调用的返回值传播出去,Kaarel 的回答做得非常干净。
-
你能解释一下 Kaarel 的第一个答案是如何工作的吗?我不明白如何在 totlist 后面附加一个将 totlist 设置为 0 的函数。
标签: python list recursion mapping return