2011-06-20 13 views
0

これはPythonで配列を宣言し反復する正しい方法ですか?各要素に定数が掛けられますか?Pythonの配列と混同します

timeArray = array([0]*1000) 

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

基本的に配列であるが、Pythonでlistと呼ばれるデータ構造ではなく、['array'](http://docs.python.org/library/array.html)をしてもよろしいですか? – 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にしてもよろしいですか?

+0

これは新しい配列を作成しませんか? – cwallenpoole

+0

@cwallenpoole:私のNumpyの例を参照していたら、1つの配列を構築し、その場所を変更するバージョンを投稿したばかりです。 –

+0

OPはOPが要求したものを誤解しました。 – cwallenpoole

0

これはおそらく分かりにくく、必要なことをします。

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

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

または 'timeArray = [i *範囲(1000)内のiのdeltaTime] ' –

+0

-1これは間違っていて、それはむしろ冗長です。 'timeArray [0] = 0'を繰り返し設定するのに4行かかり、同じ1000要素配列を1000回出力します。 @ larsmansのバージョンは素晴らしいです、答えとして投稿してください。 – delnan

+0

@delnan:それを行った。 –

0

それであるあなたが本当に必要なもののように見える(脇は:

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

:あなたは数値演算をやっているので、あなたがより速く配列をしたい場合は、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配列は、配列のすべての要素にスカラー値を掛けます。 さらに、元の配列コードが実際に動作するかどうかはわかりません。また、配列数が非常に高速です。