2012-04-11 8 views
2

Xの2次元要素を持つ配列を初期化したい。たとえば、X = 3の場合は、[[0,0]、[0,0]、[0,0]]にします。私は[0] * 3が[0、0、0]を与えることを知っていますが、2次元要素に対してこれをどうやって行いますか?Pythonで2次元要素の1次元配列を初期化するにはどうすればよいですか?

+1

あなたが0の束にコンテナを「初期化」の観点で考えている場合はPythonでの時間のほとんどは、あなたは間違ってそれをやっています。 –

+0

私はGoogle Code Jamの練習をしています.2,3,1,4,5,2などの数字のストリームを読み込んで[2,3]、[1,4]、 [5,2]]。他に何をお勧めしますか? – Kobi

+1

数字を空リストに追加することをお勧めします。 –

答えて

6

だと信じています:上記のコードで

m = [[0] * 2 for _ in xrange(3)] 

、行列の行数、および列数として2として3考えます。 0は、要素の初期化に使用する値です。これに留意してください:Python 3を使用している場合は、xrangeの代わりにrangeを使用してください。より一般的なソリューションについては

、この機能を使用します。

def create_matrix(m, n, initial=0): 
    return [[initial] * n for _ in xrange(m)] 

質問の特定のケースの場合:代わり

m = create_matrix(3, 2) 
print m 
> [[0, 0], [0, 0], [0, 0]] 

、あなたがnumpyを使用して気にしない場合は、することができますMellkorの答えに示すようにnumpy.zeros()関数を使用してください。

0

私はそれがこれを試してみてください[[0,0],]*3

+0

それは実際には[[0,0]、+ [[0,0]] + [[0,0]]のリストとして、リスト内のものを複数回追加します。 –

+1

末尾のコンマもなくても動作するようです。 – Interrobang

+6

これは、同じリストに対する3つの参照を含むリストを作成するので、 '[[0,0]、] + [[0,0]、] + [[0,0]、]'と同じではありません。要素の1つを変更すると、3つのサブリストがすべて変更されます。 – DSM

3

私はnumpy.zerosがそのように便利だと思います。

配列([0、0、0、0]、 [0、0、0、0]を:

x=4 

numpy.zeros((x,x)) 

はあなたを与えるだろう、と言います、 [0、0、0、0]、 [0、0、0、0]])

+0

私は数秒で私を倒した。 – Akavall

+0

Hehe ..すみません:) – Mellkor

0

は、構築物

[[0,0]]*3を使用します

作品だけで罰金と次の値を返します。

[[0, 0], [0, 0], [0, 0]]

関連する問題