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
相关产品推荐
相关产品推荐

