NumPy中水平合并多列表保留子列表为单行结构的方法
实现方法
你需要的「单行18列、每个位置保留独立子列表不打散」的结构,本质是要给18个子列表的集合外层增加一层代表「行」的嵌套维度,根据你需要纯Python列表还是NumPy数组,对应写法如下:
1. 纯Python列表实现
你之前写的L_ALL = [L1,L2,....L18]得到的是长度为18的一维列表,没有行维度,视觉上会被感知为"18行",只需要在外层再套一层方括号,就能得到1行18列的结构:
# 示例数据 L1 = [1,2,3,4] L2 = [5,6,7,8] L3 = [5,7,8,5] # ... 省略L4到L17的定义 L18 = [6,4,7,8] # 正确写法 L_ALL = [ L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18 ]
验证结构:
len(L_ALL)输出1,对应1行len(L_ALL[0])输出18,对应单行下的18个列元素- 取第一行第三列的子列表直接用
L_ALL[0][2]即可拿到完整的L3,子列表结构完全保留。
2. NumPy数组实现(形状严格为(1,18))
不要使用hstack、concatenate这类会沿轴拼接打散元素的函数,直接通过构造参数控制维度即可:
import numpy as np # 方法1:构造时直接指定最小维度为2,自动生成1行的结构 L_ALL_np = np.array( [L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18], ndmin=2, dtype=object # 如果子列表长度不一致必须加这个参数,避免NumPy自动广播报错 ) # 方法2:如果你已经写好了一维的L_ALL = [L1,...L18],直接扩维度即可 L_ALL = [L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18] L_ALL_np = np.expand_dims(np.array(L_ALL, dtype=object), axis=0)
验证结构:执行print(L_ALL_np.shape)会输出(1, 18),完全符合单行18列的要求,每个位置存储的元素就是对应的原始子列表。
之前写法的问题说明
- 直接写
[L1,...L18]是一维结构,不存在行维度,默认按垂直方向展示就会看起来像18行 np.hstack、np.concatenate、列表sum的核心作用就是把多个序列的元素展开后拼接,自然会打散子列表结构,不适用当前保留子列表独立性的需求。
内容的提问来源于stack exchange,提问作者PPM
相关产品推荐
相关产品推荐

