如何用Python合并动态多维列表元素生成目标新数组
动态维度多维子项数组合并实现
需求描述
- 目标:将列表中包含的多维子项合并为新数组,支持任意动态维度的输入
- 二维场景示例:
- 输入:
[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]] - 输出:
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
- 输入:
- 兼容更高维度的
[1, 2, ...]嵌套结构处理
现有问题代码
import numpy as np regular_list = [] regular_list.append([[[-0.1905 , -0.4675 ],[-0.573 , -0.8115 ]], [[-0.468 , -0.3585 ],[-0.8145 , -0.7735 ]], [[-0.356 , -0.1435 ],[-0.7645 , -0.5415 ]]]) regular_list.append([[[-0.145 , 0.52 ],[-0.065 , 0.195 ]], [[-0.535 , 0.405 ],[-0.05 , 0.285 ]], [[-0.39 , 0.375 ],[-0.275 , 0.26 ]]]) regular_list.append([[[-0.2445 , 0.1275 ],[-0.229 , -0.147 ]], [[-0.117 , -0.043 ],[-0.151 , -0.046 ]], [[0.03 , 0.0245 ],[0.047 , 0.049 ]]]) flat_list = [i for i in regular_list] print('Original list', regular_list) print('Transformed list', flat_list)
当前错误输出
[[[[-0.1905, -0.4675], [-0.573, -0.8115]], [[-0.468, -0.3585], [-0.8145, -0.7735]], [[-0.356, -0.1435], [-0.7645, -0.5415]]], [[[-0.145, 0.52], [-0.065, 0.195]], [[-0.535, 0.405], [-0.05, 0.285]], [[-0.39, 0.375], [-0.275, 0.26]]], [[[-0.2445, 0.1275], [-0.229, -0.147]], [[-0.117, -0.043], [-0.151, -0.046]], [[0.03, 0.0245], [0.047, 0.049]]]]
期望输出
[[[[-0.1905, -0.4675], [-0.573, -0.8115]], [[-0.468, -0.3585], [-0.8145, -0.7735]], [[-0.356, -0.1435], [-0.7645, -0.5415]]], [[-0.145, 0.52], [-0.065, 0.195]], [[-0.535, 0.405], [-0.05, 0.285]], [[-0.39, 0.375], [-0.275, 0.26]], [[-0.2445, 0.1275], [-0.229, -0.147]], [[-0.117, -0.043], [-0.151, -0.046]], [[0.03, 0.0245], [0.047, 0.049]]]
问题原因
现有列表推导仅遍历复制了最外层列表结构,没有展开后续外层元素的子项,无法达到合并效果。
适配动态维度的实现方案
方案1:纯Python实现(无第三方依赖)
不需要预先判断数组维度,保留第一个子项完整结构,后续外层元素直接展开子项追加即可,适配任意嵌套层级:
def merge_multi_dim(input_list): if not input_list: return [] result = [input_list[0]] for block in input_list[1:]: result.extend(block) return result # 调用方式 flat_list = merge_multi_dim(regular_list)
方案2:Numpy实现(适合数值计算场景)
通过指定第0轴拼接自动对齐维度,适合后续需要做数值运算的场景:
import numpy as np # 首个元素新增一维保证拼接轴对齐 flat_list = np.concatenate( [regular_list[0][np.newaxis, ...], *regular_list[1:]], axis=0 ).tolist()
两种方案输出结果完全匹配预期,且对输入数组的维度无固定要求,支持任意层级的嵌套结构输入。
内容的提问来源于stack exchange,提问作者Huy DQ
相关产品推荐
相关产品推荐

