首页 文章

在python中创建递归列表长度检查器[重复]

提问于
浏览
2

这个问题在这里已有答案:

我有一组元素,其中嵌套了多个其他元素 . 我试图通过递归提取所有这些,因为我不知道嵌套的深度是多少 . 为了比较这个更加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

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

    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

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

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

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

相关问题