1
Pythonのこれら2つの配列宣言の違いは何ですか?Pythonのこれら2つの配列宣言の違いは何ですか?
table = [[0]*100]*100
table = numpy.zeros([100,100], int)
Pythonのこれら2つの配列宣言の違いは何ですか?Pythonのこれら2つの配列宣言の違いは何ですか?
table = [[0]*100]*100
table = numpy.zeros([100,100], int)
実際には共通点はありません。 2番目の配列はnumpy 2D配列です。最初は何も有用ではありません - それは100ゼロのSINGLE配列への参照で、それぞれ一つが100の項目の配列、です:
table = [[0]*100]*100
table[1][0]=222
print table[0][0]
この版画「222」!
table = numpy.zeros([100,100], int)
table[1][0]=222
print table[0][0]
これは '0'を出力します。
もう一度、最初の1つは危険なが間違っています。これを参照してください。
あなたがtable
を宣言した方法は、サブリストは再びすべての上に重複しているので、それが起こる
In [8]: table = [[0]*2]*10
In [9]: table
Out[9]:
[[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0]]
In [10]: table[0][1] = 5
In [11]: table
Out[11]:
[[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5]]
。これを正しく行う方法については、this FAQを参照してください。