TypeError:'int'对象不支持项目分配

时间:2014-01-27 20:08:39

标签: python typeerror

p=range(0,1200,10)
lenp=len(p)
rp=1.331
po=1000
T=280
Temp=(lenp)

for i in p:
    Temp[i]=T*(p[i]/po)**rp
print T

我收到此错误但不知道如何修复它...

Temp[i]=T*(p[i]/po)**rp

TypeError: 'int' object does not support item assignment

4 个答案:

答案 0 :(得分:3)

您可能正在尝试在此处构建长度为lenp的列表。您需要在此处通过乘法创建列表:

Temp = [None] * lenp

但是你最好通过附加它来构建列表:

Temp = []
for i in p:
    Temp.append(T * (i / po) ** rp)

您不直接使用p[i]i ; Python for循环实际上是每个循环的

您的range()会在系列[0, 10, 20, ... 1200)中生成值,而for循环会在每次迭代时将每个值分配给i。如果您再次使用i索引到p,则会遇到问题; p[0]仍为0,但p[10]将为100p[20]200等,直到p[120]抛出一个IndexError,因为该范围内只有119个不同的值。

您可以将附加到for的{​​{1}}循环折叠为列表解析,以便一次性构建列表:

Temp

答案 1 :(得分:2)

您的代码中存在一些问题。

最直接的一个是你的Temp值不是你可以分配事物的序列,只是一个整数(括号不做任何事情)。虽然您可以通过添加逗号将其变为元组,但仍然不允许在创建后将值分配给Temp(元组是不可变的)。相反,你可能想要一个清单。

然而,你的循环还有另一个问题。像for value in sequence这样的for循环会将sequence中的值分配给变量value。它没有分配索引!如果需要索引,可以使用enumerate或使用其他循环结构,例如列表推导。

以下是代码的最低版本,它首先创建lenp个零的列表,然后将其值替换为计算值:

p=range(0,1200,10)
lenp=len(p)
rp=1.331
po=1000
T=280
Temp=[0]*lenp

for i, p_value in enumerate(p):
    Temp[i]=T*(p_value/po)**rp
print T

这是一个更加pythonic版本,使用列表理解而不是普通循环:

rp=1.331
po=1000
T=280
Temp = [T*(p_value/po)**rp for p_value in range(0,1200,10)]

答案 2 :(得分:1)

你的Temp不是元组,它只是括号中的整数。您可以使用简单的,来解决此问题。请考虑以下事项:

>>> x = (42)  # not a tuple
>>> x[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
>>> 
>>> x = (42,)  # tuple
>>> x[0]
42

但是,元组是不可变的,你不能执行这样的任务:

>>> x[0] = 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

您可以使用列表来解决此问题。

答案 3 :(得分:1)

错误是,当我们为x分配一个(数字)时,这实际上是在发生这种情况,

>>> x = (50)
>>> x
50

因此,如果您要创建一个空列表,可以用这种方式完成

rows = 5
cols = 3
matrix = [[0 for c in range(cols)] for r in range(rows)]

它会创建类似这样的东西,

>>> matrix
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]