Python如何将任意一维数组转换为固定4列的二维数组
一维数组转固定4列二维数组实现
需求规则
- 输出固定为4列的二维结构,格式为
[[...], [...]] - 按列优先规则填充元素:先填满第一列所有行,再依次填充后续列
- 原数组元素不足的空位,统一使用
None补全
转换示例
- 输入长度为8时:
a = [1, 2, 3, 4, 5, 6, 7, 8] b = [ [1, 3, 5, 7], [2, 4, 6, 8] ]
- 输入长度为6时:
a = [1, 2, 3, 4, 5, 6] b = [ [1, 3, 5, None], [2, 4, 6, None] ]
- 输入长度为100(元素为1~100序列)时:
b = [ [1, 26, 51, 76], [2, 27, 52, 77], ..., [25, 50, 75, 100] ]
纯Python通用实现(无第三方依赖)
不需要依赖Numpy,直接通过基础语法实现,兼容任意长度的输入一维列表:
def reshape_fixed_4cols(input_arr): col_count = 4 total_len = len(input_arr) # 整数运算实现向上取整,计算所需行数 row_count = (total_len + col_count - 1) // col_count # 初始化所有位置为None的二维结果数组 result = [[None for _ in range(col_count)] for _ in range(row_count)] ptr = 0 # 列优先顺序填充:外层遍历列,内层遍历行 for col in range(col_count): for row in range(row_count): if ptr >= total_len: return result result[row][col] = input_arr[ptr] ptr += 1 return result
验证结果
传入示例中的三个测试用例,输出完全匹配规则要求:
- 传入长度8的列表,返回
[[1, 3, 5, 7], [2, 4, 6, 8]] - 传入长度6的列表,返回
[[1, 3, 5, None], [2, 4, 6, None]] - 传入1~100的序列,返回25行4列的数组,首行
[1,26,51,76]、末行[25,50,75,100]
Numpy适配实现
如果需要兼容Numpy生态,注意reshape接口需要先将数组补长到4的整倍数,再指定列优先顺序(order='F')即可:
import numpy as np def reshape_fixed_4cols_numpy(input_arr): col_count = 4 total_len = len(input_arr) row_count = (total_len + col_count - 1) // col_count # 补全None到总长度匹配二维数组元素数 padded_arr = input_arr + [None] * (row_count * col_count - total_len) # order='F'对应Fortran风格列优先填充 return np.array(padded_arr).reshape(row_count, col_count, order='F').tolist()
内容的提问来源于stack exchange,提问作者Doni
相关产品推荐
相关产品推荐

