Python计算R3时出现'int' object is not subcriptable错误求助
问题解决:TypeError: 'int' object is not subscriptable
错误核心原因
你遇到的报错本质是变量混淆:
- 在第一个循环里,
a是每次循环赋值的单个整数(1或0),循环结束后a最终只是一个int值,并非你以为的二维数组storage_a。当你计算R3时尝试用a[idn][idj]访问下标,自然触发"int不可下标访问"的错误。 - 额外问题:第一个循环中使用
p[i][j]和c[i][j]时,p和c还未定义(这部分代码实际会先报错);当前的storage_R3会被填充为一维列表,不符合你预期的(4,5)二维形状。
修复后的完整代码
import numpy as np import random n = 4 w = 5 v = 3 low = 0 high = 500 sample_size = 5 def get_numbers(low, high, sample_size): return random.sample(range(low, high), sample_size) # 初始化p和c数组 p_one = np.array(get_numbers(low, high, sample_size), dtype=int) p_two = np.array(get_numbers(low, high, sample_size), dtype=int) p_three = np.array(get_numbers(low, high, sample_size), dtype=int) p_four = np.array(get_numbers(low, high, sample_size), dtype=int) c_one = np.array(get_numbers(low, high, sample_size), dtype=int) c_two = np.array(get_numbers(low, high, sample_size), dtype=int) c_three = np.array(get_numbers(low, high, sample_size), dtype=int) c_four = np.array(get_numbers(low, high, sample_size), dtype=int) # 提前定义p和c列表,避免第一个循环报错 p = [p_one, p_two, p_three, p_four] c = [c_one, c_two, c_three, c_four] # 计算storage_a(二维数组) storage_a = [] for i in range(n): storage_atemp = [] for j in range(sample_size): if p[i][j] >= c[i][j]: a_val = 1 else: a_val = 0 storage_atemp.append(a_val) storage_a.append(storage_atemp) print("storage_a形状:", np.shape(storage_a)) # 确认形状(4,5) # 计算storage_R3,生成二维数组 storage_R3 = [] for idn in range(n): r3_temp = [] # 临时列表存储每行数据 for idj in range(sample_size): # 使用storage_a而非a,因为a是单个整数 R3 = storage_a[idn][idj] * p[idn][idj] + (1 - storage_a[idn][idj]) * c[idn][idj] + v + 2*w r3_temp.append(R3) storage_R3.append(r3_temp) print("storage_R3形状:", np.shape(storage_R3)) # 确认形状(4,5)
关键修复点
- 替换变量引用:将计算R3时的
a[idn][idj]改为storage_a[idn][idj],storage_a才是你存储二维0/1值的数组。 - 提前定义p和c:把
p = [p_one,...]和c = [c_one,...]移到第一个循环之前,避免p[i][j]未定义的错误。 - 构建二维结构的storage_R3:在循环中添加临时列表
r3_temp,每行计算完成后再添加到storage_R3中,保证最终是(4,5)的二维形状。 - 重命名循环内变量:将循环内的单个整数
a改为a_val,避免和数组混淆,提升代码可读性。
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

