2014-01-27 94 views

回答

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 

您可以通过使用一个列表,而不是解决此问题。

+0

但是OP正在尝试将**分配给索引;一个元组不会允许这样做。 –

+0

通过添加逗号,OP可以*索引*到'x'中,但仍然无法修改它,原因有两个:(1)元组是不可变的。 (2)'i'循环了不是真正的元组或数组索引的值。 – DSM

+0

@MartijnPieters是的,这是一个很好的观点。我会编辑答案。 – arshajii

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环追加到Temp到一个列表理解打造一气呵成名单:

rp=1.331 
po=1000 
T=280 

Temp = [T * (i/po) ** rp for i in range(0, 1200, 10)] 
2

有代码中的几个问题。

最直接的一个是,您的Temp值不是您可以指定的序列,只是一个整数(圆括号不会执行任何操作)。虽然可以通过添加逗号将其变为一个元组,但它仍然不会让您在创建之后将值分配到Temp(元组是不可变的)。相反,你可能想要一个列表。

但是,您的循环还有另一个问题。 A for for循环(如for value in sequence)将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 

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

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