Python报TypeError: 'float' object is not subscriptable的原因是什么
报错原因
你在__init__方法中对size=(1,2)的numpy数组调用tolist()后得到的结果是[[x, y]]格式的二维嵌套列表,随后你使用[0]索引取出了内层列表,最终self.location实际是[x, y]格式的一维列表,两个元素均为float类型。
而你在f方法中使用self.location[0][0]的写法,相当于先取出一维列表的第一个float元素,再尝试对float类型做下标访问,自然会触发'float' object is not subscriptable的报错。
修复方案
- 方案1:修改
f方法中的取值逻辑,适配一维列表的结构:
def f(self, obj): return sqrt((self.location[0] - obj.location[0]) ** 2 + (self.location[1] - obj.location[1]) ** 2)
- 方案2:修改
__init__中的赋值逻辑,保留二维列表结构,适配原有f方法的写法:
def __init__(self, location = None): self.id = next(MyClass.id) self.location = np.random.uniform(0, 1, size=(1, 2)).tolist()
内容的提问来源于stack exchange,提问作者user1393214
相关产品推荐
相关产品推荐

