Python实现matrix列表转置报TypeError:function无len()如何解决
错误原因
- 装饰器传参逻辑错误:使用
@transpose_matriks装饰matrixY函数时,入参mat_a实际接收的是matrixY函数对象本身,而非待转置的矩阵数据,调用长度计算时就会触发函数无len()的报错 - 被装饰函数返回值错误:
matrixY中返回了自身函数对象matrixY,而非定义的矩阵数据 - 缺少自定义函数定义:代码中使用的
pjg_matriks、lbr_matriks函数未实现,运行时会触发未定义报错 - 原矩阵结构不符合转置需求:一维列表不存在转置逻辑,结合你期望的输出
[3,4,2,5]反推,原矩阵应为2行2列的二维列表
修改后可运行代码
def transpose_matriks(func): def wrapper(): # 执行被装饰函数获取待转置的矩阵数据 mat_a = func() temp_row = [] temp_mat = [] # 用内置len方法直接获取矩阵的行数、列数 rows = len(mat_a) cols = len(mat_a[0]) for i in range(cols): for j in range(rows): temp_row.append(mat_a[j][i]) temp_mat.append(temp_row) temp_row = [] # 将转置后的二维矩阵扁平化,匹配预期输出格式 return [num for row in temp_mat for num in row] return wrapper @transpose_matriks def matrixY(): # 修正原矩阵为2行2列结构 X = [[3,2],[4,5]] return X result = matrixY() print(f"matrixY = {result}")
运行输出
matrixY = [3,4,2,5]
内容的提问来源于stack exchange,提问作者Ivan Dwi nugraha
相关产品推荐
相关产品推荐

