この記事の例では、Python の配列定義方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
Python には配列のデータ構造はありませんが、リストは次のような配列に非常に似ています:
a=[0,1,2]
現時点では: a[0]=0、a[1] =1、a[2]=2 ですが、配列 a を 0 から 999 まで定義したい場合はどうすればよいでしょうか?という疑問が生じます。 = range(0, 1000) を通して。または、a = range(1000) として省略し、長さ 1000 の a を定義する場合、初期値がすべて 0 の場合、a = [0 for x in range(0, 1000)]
以下は 2 次元配列の定義です:
直接定義:
a=[[1,1],[1,1]]
これは、初期値 0 の 2*2 2 次元配列を定義します。
間接定義:
a=[[0 for x in range(10)] for y in range(10)]
これは、初期値 0 の 10*10 の 2 次元配列を定義します。
リテラル 2 次元配列のより簡単な方法もあります。
b = [[0]*10]*10
初期値 0 で 10*10 の 2 次元配列を定義します。
a=[[0 for x in range(10)] for y in range(10)] と比較します。 print a==b の結果は True です。
しかし、a の代わりに b の定義方法を使用した後、これまで正常に動作していたプログラムも異常をきたしました。注意深く分析した結果、違いが見つかりました:
a[0][0]=1 の場合、 a[0][0 ] は 1 で、その他はすべて 0 です。
b[0][0]=1の場合、a[0][0]、a[1][0]、a[9,0]はすべて1になります。
これは、大きな配列内の 10 個の小さな 1 次元データがすべて同じ参照を持つ、つまり同じアドレスを指していることを示しています。
したがって、 b = [[0]*10]*10 は従来の 2 次元配列に準拠しません。
同時にテストした後: c=[0]*10 の定義は、上記の同じ参照の問題がなければ、c=[0 for x in range(10)] と同じ効果があると推定されます。配列 c の定義は値型 Multiply で、前の b は 1 次元配列が参照であるため、型の乗算を使用しています (C# の値型と参照型を借用しています。適切かどうかはわかりません)。
Python 配列の定義方法と関連記事の詳細については、PHP 中国語 Web サイトに注目してください。