将嵌套层级不一致的嵌套列表展开为单层列表
处理层级不一致的嵌套列表展开问题
常规的列表扁平化方法(比如两层嵌套的列表推导式、itertools.chain)没法处理层级不规则的嵌套列表,这里给你两种可行的解决方案:
方法一:递归实现
递归是最直观的方式,遍历每个元素,判断是否为列表,是就继续递归展开,不是则直接加入结果列表:
def flatten(nested_list): result = [] for item in nested_list: if isinstance(item, list): result.extend(flatten(item)) else: result.append(item) return result
测试你的示例:
list_a = [ [[1, 2]], [1, 1, 2], [[1, 2, 2], [3], [3,4]], [[[1,1], [1,2,3], [1,2,1]], [1,1]] ] list_b = flatten(list_a) print(list_b) # 输出: [1, 2, 1, 1, 2, 1, 2, 2, 3, 3, 4, 1, 1, 1, 2, 3, 1, 2, 1, 1, 1]
方法二:迭代实现(避免递归深度问题)
如果嵌套层级极深,递归可能触发RecursionError,这时可以用栈来迭代处理:
def flatten_iterative(nested_list): result = [] stack = list(nested_list) while stack: item = stack.pop() if isinstance(item, list): stack.extend(item) else: result.append(item) # 栈是后进先出,最后反转结果恢复原顺序 return result[::-1]
运行后同样能得到符合预期的扁平化列表。
内容的提问来源于stack exchange,提问作者Elicon
相关产品推荐
相关产品推荐

