我无法理解递归嵌套列表中的问题。问题;需要定义一个过程来访问嵌套列表到任意深度。它将采用嵌套列表和索引,并返回该索引处的列表部分。从这个给定的函数中,递归地找到给定索引处的值。
例如
这里是一个更好的视觉表现。要从中选择元素9,我们需要做类似的事情 嵌套[3] [1]
nested = \ [[[1, 2], 3], [4, [5, 6]], 7, [8, 9, 10]]
recursive_func(nested_list, [3,1]) #recursive function definition, the second argument is the index at which the data needs to be retrieved.
>>> 9 #so given the function an index of [3,1] would return 9
任何指导我正确方向的帮助都会感激不尽
答案 0 :(得分:1)
这可能对你有用,但我仍然不能100%确定你在找什么......
>>> def findItem(nested, pos):
if pos[0] == 1:
return nested[pos[1]-1]
else:
nextLevelDown = []
for item in nested:
if type(item) == type([]):
nextLevelDown = nextLevelDown + item
return findItem(nextLevelDown, [pos[0]-1, pos[1]])
>>> findItem([[[1, 2], 3], 4], [3, 1])
1
>>> findItem([[[1, 2], [3]], 4], [3, 3])
3
>>> findItem([[[1, 2], [3]], 4], [2, 2])
[3]
更新:所以经过多次来回,我终于理解了这个问题,它比原来看起来简单得多,只需要:
>>> def recursiveRef(nested, idxList):
if len(idxList) > 1:
return recursiveRef(nested[idxList[0]], idxList[1:])
return nested[idxList[0]]
>>> recursiveRef([[[1, 2], 3], [4, [5, 6]], 7, [8, 9, 10]], [3, 1])
9
答案 1 :(得分:0)
如果我理解正确,你只需要将嵌套列表转换为非嵌套列表?然后查看索引?如果是这样,那么你可以尝试这样的事情(我现在没有python,所以把它当作伪代码对待):
def unwrap_list(list, result):
if type(list) == type([]):
for value in list:
unwrap_list(value, result)
else:
result.append(list)
确保在调用此函数之前定义变量unwrapped = []
并使用unwrap_list(list, unwrapped)
。结果将存储在变量unwrapped
。