web-dev-qa-db-ja.com

Pythonで2D配列を初期化する方法は?

私は擬似コードを与えられました:

    for i= 1 to 3
        for j = 1 to 3
            board [i] [j] = 0
        next j
    next i

これをPythonでどのように作成しますか?

(アイデアは、forループを使用してすべての要素を0に設定した3 x 3の配列を作成することです)。

5
Oceanescence

本当にfor-loopsを使用したい場合:

>>> board = []
>>> for i in range(3):
...     board.append([])
...     for j in range(3):
...         board[i].append(0)
... 
>>> board
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

しかし、Pythonはこれを簡単にします:

>>> board = [[0]*3 for _ in range(3)]
>>> board
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
14
arshajii
arr=[[0,0,0] for i in range(3)] # create a list with 3 sublists containing [0,0,0]
arr
Out[1]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

4つの0を含む5つのサブリストを含むリストが必要な場合:

In [29]: arr=[[0,0,0,0] for i in range(5)]

In [30]: arr
Out[30]: 
[[0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0]]

範囲は必要なサブリストの数を指定します。範囲は0から始まるため、範囲4は0,1,2,3,4です。あなたに5つの[0,0,0,0]を与えます

リスト内包表記の使用は、次の場合と同じです。

arr=[]
for i in range(5):
    arr.append([0,0,0,0])

arr
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
2

与えられた擬似コードのスタイルを使用するか、単にpython 1つのライナーを使用することができます

chess_board = [[x] * 3 for _ in range(y)]->リスト内包

または、Javaなどの他の言語のプレーンループスタイルを使用することもできます。見た目がずっときれいできれいなワンライナーが好きです。

0
dwaodkwadok

numpyにはこれのための何かがあります:

numpy.zeros((3,3))
0
Ben

擬似コードに近いものが必要な場合:

board = []
for i in range(3):
    board.append([])
    for j in range(3):
        board[i].append(0)
0
Chris Mukherjee