如何修复AttributeError: 'list' object has no attribute 'shape'错误?
解决AttributeError: 'list' object has no attribute 'shape'的问题
嘿,这个报错我太熟悉了!咱们先搞清楚问题出在哪:.shape是NumPy数组独有的属性,而你传入的grades是普通的Python列表,自然没有这个属性,所以才会抛出这个错误。下面分两种情况给你解决方案:
情况1:你确实在处理普通嵌套列表
如果grades是类似[[85, 90], [78, 82], [92, 88]]这样的二维列表,那咱们用Python原生的方法就能获取行数和列数:
- 行数直接用
len(grades)就能拿到 - 列数如果所有行的长度一致,可以用
len(grades[0]),但最好先判断列表是否为空,避免报错
修改后的代码示例:
def computeFinalGrades(grades): a = [] # 先处理空列表的情况 if not grades: N, M = 0, 0 else: N = len(grades) # 获取行数 M = len(grades[0]) # 获取列数(假设所有行长度相同) # 这里继续写你的后续逻辑...
如果你的列表行长度可能不一样(比如有的行多一列少一列),可以用列表推导式获取每一行的长度:
row_lengths = [len(row) for row in grades]
情况2:你本来想处理NumPy数组
如果你原本的需求就是用NumPy来处理数据,那只需要先把普通列表转换成NumPy数组,就能用.shape属性了:
首先确保你已经安装了NumPy(没装的话跑pip install numpy),然后修改代码:
import numpy as np def computeFinalGrades(grades): a = [] # 将普通列表转换为NumPy数组 np_grades = np.array(grades) N, M = np_grades.shape # 后续逻辑继续...
这样就能正常获取数组的行数和列数啦~
内容的提问来源于stack exchange,提问作者Vatsal




