如何用Numpy从不规则长度列表创建带默认值的二维数组?
简洁实现不同长度列表转补全默认值的二维数组
嘿,我来给你分享几个更简洁的实现方案,比你现在写的繁琐代码清爽太多啦!针对你要把不同长度的列表转成补全默认值的二维数组需求,这里有几种实用的方法:
方法一:用Numpy的pad函数直接填充
先找出所有列表的最大长度,再对每个列表进行尾部填充,缺的位置补默认值,一步到位:
import numpy as np a = [1,2,3] b = [4,5] DEFAULT_VALUE = 0 # 替换成你需要的默认值 max_len = max(len(a), len(b)) # 对每个列表填充至max_len长度,不足部分补DEFAULT_VALUE c = np.array([ np.pad(arr, (0, max_len - len(arr)), mode='constant', constant_values=DEFAULT_VALUE) for arr in [a, b] ]) print(c) # 输出:array([[1, 2, 3], [4, 5, 0]])
方法二:用itertools.zip_longest配对补全
这个方法适合处理任意数量的可迭代对象,通过配对补全后转置得到目标数组:
import numpy as np from itertools import zip_longest a = [1,2,3] b = [4,5] DEFAULT_VALUE = 0 # zip_longest会按最长的迭代器配对,缺值补DEFAULT_VALUE,转置后得到二维数组 c = np.array(list(zip_longest(a, b, fillvalue=DEFAULT_VALUE))).T print(c) # 输出:array([[1, 2, 3], [4, 5, 0]])
方法三:纯列表推导式补全后转数组
如果不想用额外的工具函数,用基础的列表操作就能完成,可读性拉满:
import numpy as np a = [1,2,3] b = [4,5] DEFAULT_VALUE = 0 max_len = max(len(a), len(b)) # 给每个列表补全默认值到max_len长度 padded_lists = [lst + [DEFAULT_VALUE] * (max_len - len(lst)) for lst in [a, b]] c = np.array(padded_lists) print(c) # 输出:array([[1, 2, 3], [4, 5, 0]])
这几种方法都比你原来的代码简洁很多,你可以根据自己的使用场景选最顺手的~
内容的提问来源于stack exchange,提问作者Hans Wurst
相关产品推荐
相关产品推荐

