Pythonの2次元配列を正しく作成する

Javaは2次元配列を作成します#

2次元配列を作成するためのJavaのフォーマットを見てみましょう。

type arrayName[][];
type [][]arrayName;

といった:

int [][]  arr=newint[5][3];

5行3列の整数の2次元配列が作成されます。フリーハンド...

Pythonの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]]

これは面倒すぎるので、もっと良い方法があるのではないかと思います。

あなたが思うPythonの2次元配列#

方法1:##

>>> rows, cols =(2,3)>>> arr =[[0]* cols]* rows
>>> arr
[[0,0,0],[0,0,0]]

方法2:##

>>> arr =[[0for i inrange(cols)]for j inrange(rows)]>>> arr
[[0,0,0],[0,0,0]]

どちらの方法でも、現在と同じ出力が得られます。

要素をseeに変更します##

メソッド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列の正しい配列を作成します

Recommended Posts

Pythonの2次元配列を正しく作成する
python印刷配列
python array add array_Python add array
Pythonエントリチュートリアルノート(3)配列
Pythonは多次元配列ソートを実装しています
Python一次元二次元補間の例