向列表填充shape为(6,)的零数组却得到整数0,求代码错因
问题修正:追加零数组却得到整数0的原因及解决
尝试向包含等长数组的列表中追加shape为(6,)的零数组,实际却追加了整数0,相关代码、数据格式及输出如下:
原代码
def padded_list(data,column): """Returns the list of equal length paddes the list with length less than max length""" max_len = max(len(val) for sublist in data[column] for val in sublist) equal_lst = [] for innerlist in data[column]: padded_lst = [] for sublist in innerlist: #sub = [np.array(arr) for innerList in data[column] for sublist in innerList for arr in sublist] if len(sublist) == max_len: padded_lst.append(sublist[:max_len]) else: difference = max_len - len(sublist) #sub = [np.array(arr) for innerList in data[column] for sublist in innerList for arr in sublist] #padding = sub + [np.zeros(6,) for _ in range(difference)] padding = [np.zeros_like(sublist) for _ in range(difference))] # Create arrays of zeros sublist = np.concatenate([sublist] + padding) padded_lst.append(sublist) equal_lst.append(padded_lst) return equal_lst
待处理数据格式
type 0 [[[-0.17601687, -0.014907939, 0.031924307, -0.... 1 [[[-0.02781348, 0.010587102, 0.14018357, -0.10...
期望输出
[[[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([0., 0., 0., 0., 0., 0.])]]]
实际输出
[[[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), 0]]]
错误分析
1. 核心逻辑错位
你的需求是让每个内层列表(如[[数组1,数组2]]中的[数组1,数组2])的元素个数相等,不足时追加shape为(6,)的零数组,但代码逻辑完全搞反:
max_len计算错误:当前计算的是所有数组的长度最大值(即数组内元素的个数),而非内层列表的元素个数最大值。- 循环层级错误:代码遍历单个数组,试图把短数组拼接变长,而非给元素个数不足的内层列表追加新的零数组。
2. 语法错误
代码中padding = [np.zeros_like(sublist) for _ in range(difference))]多了一个冗余右括号),正确写法应为padding = [np.zeros_like(sublist) for _ in range(difference)]。此错误会直接导致代码报错,你实际运行的可能是修改后的版本,但逻辑错误才是输出整数0的关键。
修正后的代码
按照需求调整逻辑,确保给元素个数不足的内层列表追加shape为(6,)的零数组:
import numpy as np def padded_list(data, column): """Returns list with inner lists padded to equal length with zero arrays""" # 计算每个内层列表的元素个数的最大值 max_len = max(len(innerlist) for sublist in data[column] for innerlist in sublist) equal_lst = [] for outer_sublist in data[column]: padded_outer = [] for innerlist in outer_sublist: current_len = len(innerlist) if current_len == max_len: padded_outer.append(innerlist.copy()) else: difference = max_len - current_len # 生成shape为(6,)的零数组并追加 padding = [np.zeros(6,) for _ in range(difference)] padded_inner = innerlist + padding padded_outer.append(padded_inner) equal_lst.append(padded_outer) return equal_lst
修正说明
- 调整
max_len计算逻辑,现在获取的是内层列表的元素个数最大值。 - 优化循环层级,直接给元素个数不足的内层列表追加零数组,而非修改单个数组长度。
- 按照需求生成
np.zeros(6,)作为填充,替代不符合期望的np.zeros_like(sublist)。
内容的提问来源于stack exchange,提问作者Saish Sawant
相关产品推荐
相关产品推荐

