まず
Python
1meibo = [[[0]*gakunen]*kumi]maxno
だと順序が逆で
Python
1meibo = [[[0]*maxno]*kumi]*gakunen
が意図した順番になります。またリストにインデックスは 0 から始まりますので
Python
1meibo[3][4][10] = "Hamada Taro"
ではなく
Python
1meibo[2][3][9] = "Hamada Taro"
になります。
さてここからが厄介なのですが以下のような二次元配列を考えます。
Python
1a = [[0]*3]*3 # [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
一部を変えたとしましょう。
こうなると思うじゃないですか
Python
1[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
こうなっちゃうんですよ〜〜
Python
1[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
これはなぜかと言うと、リストの要素は値で持っているのではなく参照で持っているからなんです。なので *
で単純にリピートしてしまうと参照をコピーしてしまうので同じところを指したままになります。同じところの値を更新すれば当然同じところを指している全ての値が更新される、そういうことです。ですので多次元配列を使いたいときは for
などを使って初期化するようにしましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。