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

creating recursive list length checker in python

本问题已经有最佳答案,请猛点这里访问。

我有一个集合元素,其中嵌套了多个其他元素。我正试图通过递归提取所有这些元素,因为我不知道嵌套的深度有多少。为了将其与更为Python式的东西进行比较,我想假设一个元素列表。该列表中的每个项可以是单个值,也可以是另一个元素列表。然后对于每个子列表,可以有单个值或多个子列表。我想遍历所有的子列表,并从所有的列表中拉出每个元素,直到最后一个子列表中只有一个项目。

1
2
3
4
5
6
7
8
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的列表(唯一的技巧是我不知道原始列表中每个元素的子列表深度是多少)。


据我所知,您希望使用递归来提取隐藏在某个嵌套对象中的元素。以下是一种方法:

1
2
3
4
5
6
7
8
9
10
11
12
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]

在示例列表上运行:

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

请参考以下代码与常规列表一起使用:

1
2
3
4
5
6
def flattern(lst, res):
    for elem in lst:
        if isinstance(elem, list):
            flattern(elem, res)
        else:
            res.append(elem)

请将其更新为使用您的函数