2016-03-20 9 views
4

私はハッシュテーブルのように、異なるインデックスに値を割り当てたいが、(appendを使って)連続した方法ではない。与えられたサイズの配列を初期化するには? 私は何をすべきか:Pythonで配列を宣言する方法

a=[] 
for x in range(0,10000): 
     a.append(0) 

より良い方法はありますか? また、C++にmemset()のような関数がありますか?

+3

あなたは '= [0] *を行うことができます10000' – styvane

+1

Whこれについて? 'a = [0 for range(10000)in i] ' – Valijon

+1

これはリストです。それをするには、 'a = [0] * 10000' – zondo

答えて

4

コメント欄で述べたように、ゼロの束(より専門的な使用のためのarrayモジュールがあるがない配列が、それは、Pythonのタイプではない)listを初期化するだけである。

a = [0] * 10000 

あなたは、この目的のためにmemsetに相当したい場合は、たとえば、既存のlistの最初の1000個の要素をゼロにしたい、あなたはスライスの割り当てを使用したい:

a[:1000] = [0] * 1000 
1

CPythonから「memset」への呼び出しがあります:

from cpython cimport array 
    import array 

    cdef array.array a = array.array('i', [1, 2, 3]) 

    # access underlying pointer: 
    print a.data.as_ints[0] 

    from libc.string cimport memset 
    memset(a.data.as_voidptr, 0, len(a) * sizeof(int)) 
+0

OPが実際にC配列を初期化したいという兆候はありません。また、Cythonを使用したいという兆候はまったくありません(これはCPythonと同じではありません; CPythonはCで実装された参照インタープリタを指します)。 – ShadowRanger

+0

投稿では、「また、memset()のような関数がC++にありますか? OPが問題を解決するために使用することを選択するのは、彼の決定である。ソリューションのあなたの考えに合わないという理由だけで答えを下げることは、私の視点からは少し狭いです。しかし、私はより情報に富んだ意見に遅れるだろう。私の投稿がOPの役に立つ情報を提供していないのを見たらそれを削除します。 – armatita

+0

OPが役に立つ答えを見つけられなくても、この質問を読んでいる誰かがそうするかもしれません。それが正当な答えであり、問​​題の新しい視点を提供している場合は、自由に使用でき、削除する必要はありません。 http://meta.stackoverflow.com/questions/256350/should-i-delete-my-question-if-it-got-negative-votes%3Eを参照してください。 – MANA624

2

あなたはいくつかの方法で指定されたサイズのリストを初期化することができますが。

Pythonにリスト内包語があり、他のリストのリストをインラインで作成します。あなたは10000個の要素(range(10000))のリストを作るのであれば、あなたは簡単に10000ゼロで、このリストから行うことができます:

[0 for _ in range(10000)] 

これはあなたの元の溶液にかなり近いです。

おそらくより効率的なアプローチは10000によって単ゼロリストを乗算することである。

[0]*10000 

両方10000ゼロでリストが得られます。

関連する問題