2016-12-26 6 views
0

3つのforループを呼び出さずに3次元配列のすべての要素をゼロにしたい。python:3次元リストの要素の値をすべて0にする

list= [[[0,0],[0,0,0]],[[0,0,0,0],[0,0,0]]] 

list= [[[1,2],[3,4,11]],[[5,6,12,13],[7,8,14]]] 

私は、個々の割り当てを行うにはループの3をコールする必要はありません。 この操作を行う1つの関数はありますか?

+0

あなたが実際にあなた自身の質問に答えているように思え。 – DeepSpace

答えて

1

純粋なpythonではループする必要があります。あなたが別の数値計算ライブラリを使用することができるなら、あなたはnumpyを使用することができます:@ Blckknghtあなたはより良いあなたは、単純なスライスの割り当てを使用することで、場所の項目を変更したい場合は、コメントで述べたように

In [13]: arr = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) 

In [15]: arr = np.zeros(arr.shape) 

In [16]: arr 
Out[16]: 
array([[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]]) 

、代わりに新しい作成しますnp.zeros()を使用してアレイ:

In [4]: arr[:] = 0 

In [5]: arr 
Out[5]: 
array([[[0, 0], 
     [0, 0]], 

     [[0, 0], 
     [0, 0]]]) 
+0

この質問は特にリスト*についてです。 –

+1

numpyを使うことができ、新しい配列を作成して元の配列に置き換えるのではなく、配列を修正したい場合は、単にスライス代入(arr [:] = 0')が必要です。最初のものではなく、すべての次元でブロードキャストすることを明示したい場合は、 '...'(あいまいなPythonのシングルトン 'Ellipsis'のリテラル)でインデックスを付けることもできます(' arr [...] = 0 ')。 – Blckknght

+1

@ juanpa.arrivillaga:ネストされた数値データ構造にすべての操作を一度にどのように行うかについて誰かが尋ねると、「numpyを使用する」が最も正しい答えといえます。質問者の実際のデータが、ある次元でリストの不一致の長さを持っているかどうかに応じて、ここでは適用できない場合もあります。 – Blckknght

1

あなたは、リストの内包表記を使用することができます。

[[[0 for k in m] for m in l] for l in lst] 
+1

Pythonネイティブ型の1つがすでにこの名前と呼ばれているので、 'list'を' lst'に名前を変更しました。 –

+0

リストの理解はループの構文砂糖です – abukaj

関連する問題