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
答案 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]
将为100
,p[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]]