You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何展平不规则列表并将同长度扁平列表重构为原形状

不规则嵌套列表的逆展平重构

问题场景

已知一个不规则嵌套列表,例如:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:09:25