2017-02-19 87 views
0

我目前正在学习Python(我在Matlab中有很强的背景)。我想在Python中编写一个循环,其中每次迭代都会增加数组的大小(即,我可以将新计算的值分配给变量的不同索引)。为了这个问题,我使用一个非常简单的循环来生成矢量t = [1 2 3 4 5]。在Matlab中,编程我需要的循环会是这个样子:在循环中为数组赋值 - Python

t = []; 
for i = 1:5 
    t(i,1) = i; 
end 

我已成功地实现在Python同样的事情用下面的代码:

result_t = [] 
for i in range(1,5): 
    t = i 
    result_t.append(t) 

是否有分配更有效的方法当我们在Python中迭代时数组的值?为什么不可能做t[i,1] = i(错误:列表索引必须是整数或切片,而不是元组)或t.append(t) = t(错误:'int'对象没有属性'追加')?

最后,为了简单起见,我使用了上面的例子。我知道如果我想在Python中生成vector [1 2 3 4 5],那我可以使用函数“np.arange(1,5,1)

在此先感谢您的帮助!

- >我的真正目的不是产生向量[1 2 3 4 5],而是将计算值分配给向量变量的索引。例如:

result_b = [] 
b = 2 
for i in range(1,5): 
    t = i + b*t 
    result_b.append(t) 

我为什么不能直接写t.append(t)或使用索引(即t[i] = i + b*t)?

+1

您可以使用范围,因为它已经在python 2中返回列表.Xrange和python3中它返回一个仍然适合您需要的迭代 –

回答

3

当使用append()循环时附加元素是正确的,并且它是Python lists中的内置方法。

但是你可以有相同的结果:

使用列表理解:

result_t = [k for k in range(1,6)] 
print(result_t) 
>>> [1, 2, 3, 4, 5] 

使用+操作:

result_t = [] 
for k in range(1,6): 
    result_t += [k] 

print(result_t) 
>>> [1, 2, 3, 4, 5] 

使用特殊的方法__iadd__

result_t = [] 
for k in range(1,6): 
    result_t.__iadd__([k]) 

print(result_t) 
>>> [1, 2, 3, 4, 5]