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

3D数组访问报错:'int' object is not subscriptable 问题求助

问题分析与解决方案

首先,你遇到的TypeError: 'int' object is not subscriptable错误完全是因为数组访问的语法写错了,和字符串转换没有任何关系——网上看到的说法是对你问题的误解,完全不需要转换字符串。

核心错误点

你写的a = array([k][i][j])是错误的:

  • array是你定义的3D列表,访问列表元素要用方括号索引,而不是圆括号(圆括号是用来调用函数的)。
  • 另外,[k][i][j]这种写法本身逻辑就错了:[k]是一个只有单个元素的列表,[k][i]会尝试取这个列表的第i个元素,当i>0时必然报错;而你真正想访问的是array的第k层、第i行、第j列,正确写法应该是array[k][i][j]。

其他需要修正的细节

  1. 相邻层比较的逻辑优化:你原来的代码里b是全局初始化的0,这会导致每个(row,col)的第一次比较都是和0比,而不是和上一层的同位置值比。正确的逻辑应该是:对每个(row,col),先取第一层的值作为初始b,再从第二层开始逐层比较。
  2. else: exit的问题:exit是函数,需要写成exit()才会生效;而且你的数组里有-99这个值,直接退出太粗暴,换成打印提示信息会更友好。
  3. 变量初始化:确保所有统计变量都正确初始化为0。

修正后的完整代码

# 初始化统计变量和对比基准变量
RR = NN = NR = RN = 0

array = [[[-99, -99, -99, -99, -99, -99], [-99, -99, -99, -99, -99, -99], [-99, -99, -99, -99, -99, 1], [-99, -99, -99, -99, -99, 1]], [[ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1]], [[ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1]], [[ 1, 1, 1, 1, -99, -99], [ 1, 1, 1, 1, -99, -99], [ 1, 1, 1, 1, -99, -99], [ 1, 1, 1, 1, 1, -99]], [[ 0, 1, 1, 1, 1, 1], [ 0, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1]], [[-99, -99, -99, -99, -99, -99], [-99, -99, -99, -99, -99, -99], [-99, -99, -99, -99, -99, -99], [-99, -99, -99, -99, -99, -99]], [[ 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 1], [ 0, 0, 1, 1, 1, 1], [ 0, 1, 1, 1, 1, 1]]]

# 遍历每个(row,col)位置
for i in range(4):
    for j in range(6):
        # 以第一层的当前位置值作为初始对比基准
        b = array[0][i][j]
        # 从第二层开始遍历所有层
        for k in range(1,7):
            a = array[k][i][j]
            # 进行状态对比统计
            if a == 0 and b == 0:
                NN += 1
            elif a == 0 and b == 1:
                RN += 1
            elif a == 1 and b == 0:
                NR += 1
            elif a == 1 and b == 1:
                RR += 1
            # 处理未定义的数值(比如-99)
            else:
                print(f"注意:遇到未处理的数值组合 a={a}, b={b},位置为(k,i,j)=({k},{i},{j})")
            # 更新基准值为当前层的值,用于下一层对比
            b = a

# 输出统计结果
print(f"统计结果:RR={RR}, NN={NN}, NR={NR}, RN={RN}")

关于“转换为字符串”的误解

网上的说法完全不适用你的场景——你遇到的是列表索引语法错误,不是类型不匹配的问题。你的数组元素是整数,直接进行比较完全合法,根本不需要转成字符串。那种说法可能是针对其他字符串处理场景的,被你误用到这里了。

内容的提问来源于stack exchange,提问作者rohit narayanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:47:39