如何展平不规则列表并将同长度扁平列表重构为原形状
不规则嵌套列表的逆展平重构
问题场景
已知一个不规则嵌套列表,例如:
L = [[[1,2,3],[4,5],6]]
该列表已被展平为一维列表:
L_flat = [1,2,3,4,5,6]
现有一个长度与L_flat完全相同的新一维列表:
L_flat_new = ['a','b','c','d','e','f']
需要将L_flat_new按照原列表L的嵌套结构重新组织,得到目标结构:
L_flat_new_reshaped = [[['a','b','c'],['d','e'],'f']]
解决方案
核心思路是遍历原列表的嵌套结构,同时按顺序从新扁平列表中提取元素填充,遇到子列表时递归处理,确保结构完全匹配。以下是Python实现代码:
递归实现方案
def reshape_flattened_list(original_structure, flattened_list): # 将扁平列表转为迭代器,实现按顺序逐个取元素 elem_iter = iter(flattened_list) def rebuild(struct): result = [] for item in struct: if isinstance(item, list): # 遇到子列表,递归重构 result.append(rebuild(item)) else: # 遇到单个元素,从迭代器取下一个元素填充 result.append(next(elem_iter)) return result return rebuild(original_structure) # 示例测试 original_list = [[[1,2,3],[4,5],6]] new_flat_list = ['a','b','c','d','e','f'] reshaped_list = reshape_flattened_list(original_list, new_flat_list) print(reshaped_list) # 输出: [[['a', 'b', 'c'], ['d', 'e'], 'f']]
代码说明
- 使用
iter()将新扁平列表转换为迭代器,避免手动维护索引,简化元素提取逻辑 - 递归函数
rebuild遍历原列表的每个元素:- 若当前元素是子列表,递归调用自身处理该子列表,保持嵌套结构一致
- 若当前元素是单个值,则从迭代器中取出下一个元素填充到对应位置
- 最终返回的
reshaped_list与原列表的嵌套结构完全一致,元素顺序与新扁平列表保持同步
内容的提问来源于stack exchange,提问作者Andrea G
相关产品推荐
相关产品推荐

