【发布时间】:2017-03-03 00:36:39
【问题描述】:
假设我有一个清单:
>>> nested=[[1, 2], [3, [4]]]
如果我正在寻找4,我正在尝试获得一个返回[1,1,0] 的函数。如果指定的元素不在列表中,那么它将返回一个空列表[]。
Nested 可以有任何结构,所以我认为某种类型的递归函数是最好的,但在控制结构的深度和广度方面遇到了麻烦。
这是不是工作代码,但与我的想法一致:
def locate(x,element,loc=[0],counter=0):
for c,i in enumerate(x):
if isinstance(i,list):
locate(i,loc+[0],counter+1)
else:
loc[counter]=c
if i==element: return loc
函数调用看起来像这样:
>>> locate(nested,4)
[1,1,0]
递归函数可能不是最好的解决方案,但只是我的尝试。
【问题讨论】:
-
您当前的解决方案有什么问题?除了递归时不返回。并使用默认的可变参数。
-
即
return locate(i,loc+[0],counter+1) -
如果有多个匹配项怎么办?
-
@AndrasDeak 返回第一个实例可以很好地保持类似于列表索引方法的功能
标签: python recursion functional-programming