【问题标题】:'int' object does not support item assignment“int”对象不支持项目分配
【发布时间】:2015-03-09 17:30:01
【问题描述】:

这是我的代码,它看起来像主题的问题。我是初级学习者,我不知道问题出在哪里。你能帮我修复代码并告诉我需要复习哪些知识。提前致谢。

x = int(raw_input("enter the value of x:"))
y = int(raw_input("enter the value of y:"))
i = 0
j = 0
array=[x*y]
for i in range(x):
    array.append([0 for j in range(y)])
for i in range(x-1):
for j in range(y-1):
    array[i][j]=i * j
print array

【问题讨论】:

  • array=[x*y]好像错了。
  • 你的语法太错误了。首先,如果您存储变量i=0, j=0,那么为什么要在for 循环中使用它们?这没有任何意义。
  • 如果我将array=[x*y] 更改为array = [] 并正确缩进for j in range() 行,您的代码“有效”(运行时不会出现错误)。我不确定结果是否是你想要的,所以也许你应该尝试解释你的代码应该完成什么。
  • @Marius 谢谢!我发现它有效!当我第一次开始创建一个数组时,我想我需要给它足够的空间,包含 i*j 个元素。所以我做到了。谢谢!
  • @howaboutNO 看来OP是用来声明变量的,python中当然不需要

标签: python typeerror


【解决方案1】:

你的语法太错误了。首先,如果您存储变量i=0, j=0 那么为什么要在for 循环中使用它们呢?这没有任何意义。

其次,调试一下,在列表后面加上print (array)

如果 x=5 且 y=5 ;

[25, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0 , 0], [0, 0, 0, 0, 0]]

这是你的数组,还有这一行;

array[i][j]=i * j

投掷错误?为什么?因为;

j=0
i=0
array[i]=25
array[i][j] = 2

这就是你得到错误的原因。整数,这里是2,不支持项目分配。尝试修正你的语法。

【讨论】:

  • 您对项目分配的解释令人困惑。听起来您是说array[i][j] = 2 中的2 不支持项目分配,事实并非如此。
  • 是的,我同意,我的语法非常错误。我想我应该给 i 和 j 值来初始化它们。实际上表达式:array.append([0 for j in range(y)]) 是我从正确答案中学到的,我不知道它为什么有效。你能解释一下吗?谢谢。
  • @johnwayyang 不,你不必那样做,请查看网络上有关 Python 的一些基础教程
  • @johnwayyang np mate.
【解决方案2】:

问题是您正在创建一个混合类型、整数和列表的列表,然后尝试像访问列表一样访问整数值。

让我们用一个简单的例子:

x = 2
y = 3
i = 0
j = 0
array = [x*y]

现在,让我们看看array 当前包含什么:

array
>> 6

现在我们运行你的第一个 for 循环:

for i in range(x):
    array.append([0 for j in range(y)])

让我们检查array的新值:

array
>> [6, [0, 0, 0], [0, 0, 0]]

所以现在我们看到array 的第一个元素是一个整数。其余元素都是三个元素的列表。

错误发生在第一次通过嵌套的 for 循环时。在第一遍中,i 和 j 都为零。

array[0][0] = 0*0
>> TypeError: 'int' object does not support item assignment 

由于array[0] 是一个整数,所以不能使用第二个[0]。没有什么可以得到的。所以,就像阿莎琳德说的那样,array = x*y 似乎是问题所在。

根据您真正想做的事情,可能有很多解决方案。假设您希望列表的第一个元素是长度为 y 的列表,每个值都等于x*y。然后将array = [x*y]替换为:

array = [x*y for i in range(y)]

【讨论】:

    【解决方案3】:

    尝试检查您的阵列。

    array[2*3] 将导致 [6]。

    array.append([0 for j in range(3)]) 将导致 [6,[0,0,0]],您的第一个元素不是数组。

    您的 for 循环存在缩进错误。

    我认为你想要做的是:

    array2=[]
    for i in range(2):
       array2.append([0 for j in range(3)])
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多