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

Python中将不同长度列表转为NumPy兼容数组并填充NaN的高效方法

问题:将不等长嵌套列表填充为等长列表(兼容NumPy)

输入的不等长嵌套列表示例:

arr = [[0. , 1.5, 3. , 0. , 1.5], [0. , 1.5, 3. ], [0., 1.33, 2.67, 4. ]]

期望输出(以最长子列表长度为基准,用None填充空缺,最终可兼容NumPy数组):

arr_filled = [[0. , 1.5, 3. , 0. , 1.5], [0. , 1.5, 3., None, None ], [0., 1.33, 2.67, 4., None ]]

原实现方式为通过map(len, arr)获取子列表长度,循环添加None至长度一致,现提供更简洁高效的实现方案:


简洁实现方案

1. 纯Python列表推导式(简洁直观)

先获取最长子列表的长度,再通过列表推导式一次性完成填充,比循环逐个添加更高效:

max_len = max(len(sublist) for sublist in arr)
arr_filled = [sublist + [None] * (max_len - len(sublist)) for sublist in arr]

2. 直接生成NumPy数组(一步满足兼容需求)

如果最终目标是生成NumPy数组,推荐用np.nan替代None(NumPy浮点数组会自动将None转为nan,nan更适合数值型数据处理),有两种实现方式:

方式一:列表推导式转NumPy数组

import numpy as np

max_len = max(len(sublist) for sublist in arr)
np_arr = np.array([sublist + [np.nan] * (max_len - len(sublist)) for sublist in arr])

方式二:初始化全nan数组再赋值(大数据量更高效)

避免多次列表拼接,先创建指定形状的全nan数组,再切片赋值原数据,适合处理大规模数据:

import numpy as np

max_len = max(len(sublist) for sublist in arr)
np_arr = np.full((len(arr), max_len), np.nan)
for idx, sublist in enumerate(arr):
    np_arr[idx, :len(sublist)] = sublist

内容的提问来源于stack exchange,提问作者MathX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:04