這是正確的方式來聲明和遍歷Python中的數組,其中每個元素乘以常量值?與Python中的數組混淆
timeArray = array([0]*1000)
for x in timeArray:
timeArray[x] = x * deltaTime
print(timeArray)
這是正確的方式來聲明和遍歷Python中的數組,其中每個元素乘以常量值?與Python中的數組混淆
timeArray = array([0]*1000)
for x in timeArray:
timeArray[x] = x * deltaTime
print(timeArray)
timeArray = [i*deltaTime for i in range(1000)]
將建立你想要的內容的列表。索引到列表中需要O(1)個時間,與數組相同。 Python列表非常快,他們實際上是implemented as arrays。
您確定要在構造數組/列表中的內容時使用print
嗎?
(旁白:如果你想更快的陣列,因爲你正在做的數字運算,然後numpy的陣列可能是一個更好的選擇:
timeArray = numpy.arange(1000)
timeArray *= deltaTime
)
這不會創建一個新的數組嗎? – cwallenpoole
@cwallenpoole:如果您指的是我的Numpy示例,我只是發佈了一個構建一個數組並就地修改它的版本。 –
NM誤讀了OP要求的內容。 – cwallenpoole
這可能不那麼令人困惑,而且做你想做的。
timeArray = [0 for i in range(1000)]
for x in timeArray:
timeArray[x] *= deltaTime
print(timeArray)
或者只是'timeArray = [i * deltaTime for i in range(1000)]' –
-1這是不正確的,而且在這方面比較冗長。它需要四行來重複設置'timeArray [0] = 0',並且將1000個元素的數組打印1000次。 @ larsmans的版本非常好,請將它作爲答案發布。 – delnan
@delnan:做到了。 –
它看起來像你真正需要的是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數組要快得多。
你確定你想要一個['array'](http://docs.python.org/library/array.html)而不是數據結構本質上是一個數組,但在Python中被稱爲列表? – delnan
我在某處讀到列表不適合大數據結構。 – kachilous
如果你有*百萬*與基本C數據類型('int's,'float's,'char'等等 - 參見文檔)等價的項目,那麼使用'array '。如果情況並非如此,或者代碼甚至無法正確運行(請記住:「讓它運行,使其正確,快速」 - 優化已完成*最後*),您甚至不應該想到這樣的優化。複雜性方面,列表同樣好。 – delnan