Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';int';对象不支持项分配_Python_Typeerror - Fatal编程技术网

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
;Python
for
循环实际上是针对每个循环的

您的
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]]