Python 类型错误:';int';对象不支持项分配
我得到这个错误,不知道如何修复它Python 类型错误:';int';对象不支持项分配,python,typeerror,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不是一个元组,它只是括号中的一个整数。您可以用一个简单的,来解决这个问题。考虑以下事项: Temp[i]=T*(p[i]/po)**rp TypeError: 'int' object does not support
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
不是一个元组,它只是括号中的一个整数。您可以用一个简单的,
来解决这个问题。考虑以下事项:
Temp[i]=T*(p[i]/po)**rp
TypeError: 'int' object does not support item assignment
>x=(42)#不是元组
>>>x[0]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象没有属性“\uuuu getitem\uuuu”
>>>
>>>x=(42,)#元组
>>>x[0]
42
但是元组是不可变的,您不能执行这样的赋值:
>>> 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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“tuple”对象不支持项分配
您可以通过使用列表来解决此问题。您可能试图在此处构建一个长度
lenp
的列表。您需要在此处通过乘法创建一个列表:
>>> x[0] = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
但你最好在列表中添加以下内容:
Temp = [None] * lenp
不直接使用p[i]
而是直接使用i
;Pythonfor
循环实际上是针对每个循环的
您的range()
在序列[0,10,20,…1200]中生成值,而for
循环每次迭代都将这些值分配给i
。如果您再次使用i
索引到p
,您将遇到问题;p[0]
仍然是0
,但p[10]
将是100
,p[20]
是200
,等等。直到p[120]
抛出一个索引器,因为该范围内只有119个不同的值
您可以将附加到Temp
的for
循环折叠到列表理解中,以便一次性构建列表:
Temp = []
for i in p:
Temp.append(T * (i / po) ** rp)
您的代码中有几个问题
最直接的一点是,你的Temp
值不是一个可以赋值的序列,而是一个整数(括号没有任何作用)。虽然你可以通过添加逗号将它变成一个元组,但在创建之后,你仍然无法将值赋值到Temp
(元组是不可变的).相反,你可能想要一份清单
但是,您的循环还有另一个问题。类似于for value in sequence
的for循环将sequence
中的值分配给变量value
。它不分配索引!如果需要索引,可以使用enumerate
或使用不同的循环结构,例如列表
下面是代码的最小更改版本,它首先创建lenp
零列表,然后用计算值替换它们的值:
rp=1.331
po=1000
T=280
Temp = [T * (i / po) ** rp for i in range(0, 1200, 10)]
下面是一个更具python风格的版本,它使用列表理解而不是普通循环:
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
错误在于,当我们给x分配一个(数字)时,这就是实际发生的情况
rp=1.331
po=1000
T=280
Temp = [T*(p_value/po)**rp for p_value in range(0,1200,10)]
所以,如果你想创建一个空列表,你可以这样做
>>> x = (50)
>>> x
50
它会创造出像这样的东西
rows = 5
cols = 3
matrix = [[0 for c in range(cols)] for r in range(rows)]
但是OP正在尝试分配给索引;元组不允许这样做。通过添加逗号,OP可以将索引编入x
,但仍然无法修改它,原因有两个:(1)元组是不可变的。(2)i
正在循环不是真正的元组或数组索引的值。@MartijnPieters是的,这是一个很好的观点。我将编辑答案。
>>> matrix
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]