You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:50:22