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

Python报错'int' object is not subscriptable 问题排查求助

排查Python代码中的TypeError问题:'int' object is not subscriptable

嘿,作为Python新手遇到这种下标错误很正常,咱们一步步拆解问题出在哪,再给你修正方案:

为什么会报错?

报错行是x = lst[0][0],这里的核心问题是:你试图对一个整数做下标访问(比如1[0]),这在Python里是不允许的。咱们顺着代码流程看哪里出了问题:

1. 组合生成阶段的细节

你的代码里生成组合的部分:

lst = [i,j] 
lst=list(itertools.combinations(lst,2)) 
temp = temp+lst 

itertools.combinations([i,j], 2)会生成一个只包含单个元组的迭代器——比如当i=1、j=2时,结果是[(1,2)]。所以最终temp列表里存的都是一个个的元组,比如(1,2)、(1,3)这类。

2. 弹出元素后的处理逻辑错了

当你执行lst = list(temp.pop())时:

  • temp.pop()弹出的是一个元组(比如(1,2))
  • list((1,2))会把这个元组转换成列表[1,2]
    这时候lst是[1,2],lst[0]就是整数1,再写lst[0][0]自然就报错了——总不能让整数1再给你返回它的第0个元素吧?

修正后的代码

其实根本不需要把弹出的元组转成列表,直接解构元组就能拿到x和y了,修正后的核心代码如下(我补全了一些必要的变量初始化,避免你遇到新的未定义错误):

import itertools
from random import shuffle

# 先初始化必要的变量(根据你的需求调整值)
i = 1
j = 1
value = 3
sqrvalue = 3
w = 10
h = 10
a = 0

temp = [] 
while i <= value: 
    while j <= value: 
        lst = [i,j] 
        lst = list(itertools.combinations(lst,2)) 
        temp += lst  # 用+=代替temp=temp+lst,效率更高
        j += 1 
    i += 1 
    j = 1 

shuffle(temp) 
while a < sqrvalue: 
    # 直接弹出元组,解构获取x和y
    x, y = temp.pop()
    w1 = w*(x-1) 
    w2 = w*x 
    h1 = h*(y-1) 
    h2 = h*y
    # 这里可以添加你要执行的操作,比如打印测试
    print(f"计算结果:w1={w1}, w2={w2}, h1={h1}, h2={h2}")
    a += 1

额外的小建议

  • 避免重复组合:如果你的需求是不生成重复的组合(比如(1,2)和(2,1)算同一个),可以把内层循环的j=1改成j=i+1,这样j只会从i的下一个数开始遍历,减少冗余数据。
  • 循环变量初始化:一定要确保i、j、a这些循环变量有初始值,不然会抛出NameError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:45