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) |
请将其更新为使用您的函数