2011-06-20 54 views
0

這是正確的方式來聲明和遍歷Python中的數組,其中每個元素乘以常量值?與Python中的數組混淆

timeArray = array([0]*1000) 

for x in timeArray: 
    timeArray[x] = x * deltaTime 
    print(timeArray) 
+5

你確定你想要一個['array'](http://docs.python.org/library/array.html)而不是數據結構本質上是一個數組,但在Python中被稱爲列表? – delnan

+0

我在某處讀到列表不適合大數據結構。 – kachilous

+4

如果你有*百萬*與基本C數據類型('int's,'float's,'char'等等 - 參見文檔)等價的項目,那麼使用'array '。如果情況並非如此,或者代碼甚至無法正確運行(請記住:「讓它運行,使其正確,快速」 - 優化已完成*最後*),您甚至不應該想到這樣的優化。複雜性方面,列表同樣好。 – delnan

回答

4
timeArray = [i*deltaTime for i in range(1000)] 

將建立你想要的內容的列表。索引到列表中需要O(1)個時間,與數組相同。 Python列表非常快,他們實際上是implemented as arrays

您確定要在構造數組/列表中的內容時使用print嗎?

(旁白:如果你想更快的陣列,因爲你正在做的數字運算,然後numpy的陣列可能是一個更好的選擇:

timeArray = numpy.arange(1000) 
timeArray *= deltaTime 

+0

這不會創建一個新的數組嗎? – cwallenpoole

+0

@cwallenpoole:如果您指的是我的Numpy示例,我只是發佈了一個構建一個數組並就地修改它的版本。 –

+0

NM誤讀了OP要求的內容。 – cwallenpoole

0

這可能不那麼令人困惑,而且做你想做的。

timeArray = [0 for i in range(1000)] 

for x in timeArray: 
    timeArray[x] *= deltaTime 
    print(timeArray) 
+3

或者只是'timeArray = [i * deltaTime for i in range(1000)]' –

+0

-1這是不正確的,而且在這方面比較冗長。它需要四行來重複設置'timeArray [0] = 0',並且將1000個元素的數組打印1000次。 @ larsmans的版本非常好,請將它作爲答案發布。 – delnan

+0

@delnan:做到了。 –

0

它看起來像你真正需要的是numpy數組。內置數組的行爲更像列表。

#!/usr/bin/python 

from array import array 

timeArray = array("f", [1]*1000) 

deltaTime = 2 

for i, x in enumerate(timeArray): 
    timeArray[i] = timeArray[i] * deltaTime 

print(timeArray) 

# but numpy arrays behave more "naturally". 

from numpy import array 
timeArray = array([1]*1000, dtype="f") 
print (timeArray * 2) 

一個numpy數組將乘以一個標量值的數組的所有元素。 此外,我不確定你的原始數組代碼是否真的有效。另外,numpy數組要快得多。