在python中创建递归列表长度检查器

时间:2014-08-05 04:25:48

标签: python list recursion

我有一组元素,其中嵌套了多个其他元素。我试图通过递归提取所有这些因为我不知道嵌套的深度是多少。为了比较这个更加pythonic的东西我想说想象一个元素列表。该列表中的每个项目可以是单个值或另一个元素列表。然后,对于每个子列表,可以存在单个值或更多子列表。我想通过它们全部并从所有列表中提取每个元素,直到最后一个子列表上只有单个项目。

lst = [1,[[2,3,4],[5,6,7]],[[8,9,10],[[11,12,13],[14,15,16]]],17,18]
for i in lst:
    subElem = i.GetSubComponentIds()
        if subElem.Count >= 1:
            idsList.append(subElem)
            for i in subElem:
                subElem2 = i.GetSubComponentIds():
                    if subElem2.Count = >= 1:.... and so on

如何设置一个递归函数,该函数将获取输入列表上的每个元素,并在其上运行GetSubComponentIds()函数(返回另一个列表或不返回任何内容)。如果返回是一个列表,则在该子列表的每个项目上运行相同的函数GetSubComponentsIds(),直到您得不到任何回报。同时对于那些没有返回的人我想要附加的Id。因此,如果我使用上面示例中的lst,我将得到所有元素1-18的列表(唯一的技巧是我不知道原始列表中每个元素的深度有多少个子列表)。

2 个答案:

答案 0 :(得分:1)

据我了解,您希望使用 recursion 来提取隐藏在某个嵌套对象中的元素。这是一种方法:

def is_list(x):
    # Replace this with an appropriate test for your type
    return hasattr(x, 'index')

def recurse(lst):
    if is_list(lst):
        elements = []
        for element in lst:
            elements += recurse(element)
        return elements
    else:
        return [lst]

在您的样本列表上运行:

>>> recurse(lst)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

答案 1 :(得分:0)

请参阅以下使用常规列表的代码:

def flattern(lst, res):
    for elem in lst:
        if isinstance(elem, list):
            flattern(elem, res)
        else:
            res.append(elem)

请将其更新为使用您的功能