递归嵌套列表

时间:2011-05-10 07:31:07

标签: python list recursion nested

我无法理解递归嵌套列表中的问题。问题;需要定义一个过程来访问嵌套列表到任意深度。它将采用嵌套列表和索引,并返回该索引处的列表部分。从这个给定的函数中,递归地找到给定索引处的值。

例如

这里是一个更好的视觉表现。要从中选择元素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

任何指导我正确方向的帮助都会感激不尽

2 个答案:

答案 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