2次元配列を作成するためのJavaのフォーマットを見てみましょう。
type arrayName[][];
type [][]arrayName;
といった:
int [][] arr=newint[5][3];
5行3列の整数の2次元配列が作成されます。フリーハンド...
Javaも模倣したいのですが、できることは次のとおりです。
>>> li[][]=[][]
File "<stdin>", line 1
li[][]=[][]^
SyntaxError: invalid syntax
申し訳ありませんが、動作しません。
しかし、それはこのようになる可能性があります、
>>> li =[[1,2,3],[4,5,6]]>>> li
[[1,2,3],[4,5,6]]
これは面倒すぎるので、もっと良い方法があるのではないかと思います。
>>> rows, cols =(2,3)>>> arr =[[0]* cols]* rows
>>> arr
[[0,0,0],[0,0,0]]
>>> arr =[[0for i inrange(cols)]for j inrange(rows)]>>> arr
[[0,0,0],[0,0,0]]
どちらの方法でも、現在と同じ出力が得られます。
メソッド1とメソッド2の配列の要素を変更してみましょう。
# 方法1
>>> rows, cols =(2,3)>>> arr =[[0]* cols]* rows
>>> arr[0][0]=1>>>for row in arr:...print(row)...[1,0,0][1,0,0]
奇妙なことが起こりました。明らかに、 arr [0] [0]
を変更しただけです。必要なのは、最初の行の最初の要素を1に変更し、各行の最初の要素を1に変更することです。
# 方法2
>>> rows, cols =(2,3)>>> arr =[[0for i inrange(cols)]for j inrange(rows)]>>> arr[0][0]=1>>>for row in arr:...print(row)...[1,0,0][0,0,0]
方法2はまさに私が望む答えです。
Pythonのシャローコピーのせいです。それでもシャローコピーとディープコピーがわからない場合は、こちらをご覧ください[Pythonを1年間学び、今回はついにシャローコピーとディープコピーを理解しました
](https://links.jianshu.com/go?to=https%3A%2F%2Fblog.csdn.net%2Fyuzhou_1shu%2Farticle%2Fdetails%2F105338700)。
ここで簡単に説明します。
方法1では、Pythonは2つのリストオブジェクトを作成せず、1つのリストオブジェクトのみを作成し、図に示すように、配列arrのすべてのインデックスが同じリストオブジェクト( list
)を指します。
ここに写真の説明を挿入
方法2は、以下に示すように、2つの別個のリストオブジェクトを作成します。
ここに写真の説明を挿入
したがって、正しい方法は方法2を使用することです。
あれは
rows, cols =(5,5)
arr2 =[[0for i inrange(cols)]for j inrange(rows)]
5行5列の2次元配列が正常に作成されます。
>>> for row in arr2:...print(row)...[0,0,0,0,0][0,0,0,0,0][0,0,0,0,0][0,0,0,0,0][0,0,0,0,0]
ただし、まだ終わっていません。もう1つ、 i
と j
が使用されていないように見えるため、単一の下線 _
を使用します。
rows, cols =(5,5)
arr2 =[[0for _ inrange(cols)]for _ inrange(rows)]
変数が一時的または無関係であることを示すために、単一の独立した下線が名前として使用される場合があります。
この時点で、ようやくPythonの2次元配列を正しく作成できるようになりました。はい、そうです:
arr2 =[[0for _ inrange(5)]for _ inrange(5)] #5行5列の正しい配列を作成します