如何在Python中对多层嵌套列表的元素递归执行函数
解决多层嵌套列表的递归处理问题
首先看你现有代码的问题:
getChildren函数里的循环只是给临时变量item赋值,根本没修改原列表的元素,而且完全没有递归深入子列表的逻辑。- 后面的
while循环逻辑完全偏离需求,一直在往原列表里追加新的layer,没有处理嵌套结构里的子元素。
针对你的需求——递归遍历多层嵌套列表,在最内层子列表的最后一个元素后添加标记,生成新的嵌套列表,这里给出正确的递归实现:
通用递归实现代码
def deep_process(lst, marker): new_lst = [] # 判断当前列表是否为最内层(无嵌套子列表) is_deepest = all(not isinstance(i, list) for i in lst) for idx, item in enumerate(lst): if isinstance(item, list): # 递归处理子列表 new_lst.append(deep_process(item, marker)) else: # 最内层列表的最后一个元素,包装成[元素, 标记] if is_deepest and idx == len(lst) - 1: new_lst.append([item, marker]) else: new_lst.append(item) return new_lst # 测试你的示例输入 original = [[1, [2, [3, [4, 5]]]], [7, [8, [9, [10, 11]]]]] # 分别给两个分支设置不同标记 processed_list = [deep_process(original[0], 'x'), deep_process(original[1], 'y')] print(processed_list)
输出结果
[[1, [2, [3, [4, [5, 'x']]]]], [7, [8, [9, [10, [11, 'y']]]]]]
代码逻辑说明
- 递归遍历每个元素:遇到子列表就递归进入处理,直到触达最内层无嵌套的列表。
- 判断当前列表是否为最内层:通过检查列表中所有元素都不是列表来确认。
- 处理元素:最内层列表的最后一个元素会被包装成
[原元素, 标记],其他元素保持原结构不变。 - 生成新列表:全程不修改原列表,而是创建新的嵌套列表返回,符合你“不扁平化”的要求。
内容的提问来源于stack exchange,提问作者eth
相关产品推荐
相关产品推荐

