2次元配列(リストのリスト)

例題1では,クラス10人の英語の得点をリストで表現した。 このようなデータ構造を1次元配列と呼ぶ。 1次元配列では,1つの添え字(インデックス)で要素の指定が容易にできる。

これに対して,Excelの表のように縦横に数値が並んだものを2次元配列と呼ぶ。 Excelでは,表を参照するとき,たとえば,A列の3行目(A3)のセルなどと呼ぶ。 このように2次元配列では,要素を指し示すのに2つのインデックスを用いる。 2次元配列を用いると,あるクラスの複数教科の得点,ある年の複数都市の日平均気温, オセロゲームの盤面などのデータを表現することが容易となる。

Pythonでは,リストのリストをつくることで2次元配列を表現することができる。 たとえば,例題1の英語の得点(eigo)の他に,理科のテスト結果(rika)があるものとする。

eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65]
rika = [35, 65, 76, 42, 52, 40, 50, 64, 88, 69]

これを2次元配列(リストのリスト)で表現するとすると,たとえば次のようになる。

listlist.py

score = [[70, 75, 82, 35, 61, 60, 68, 73, 76, 65],
         [35, 65, 76, 42, 52, 40, 50, 64, 88, 69]]
print(score[0])  #eigo
print(score[1])  #rika

各要素を参照するには,2つのインデックスを用いる。 たとえば,Aくんの英語の得点はscore[0][0],理科の得点はscore[1][0], Bくんの英語の得点はscore[0][1],理科の得点はscore[1][1], Jくんの英語の得点はscore[0][9],理科の得点はscore[1][9]となる。


リストのリストの要素の定義

ここで,次のような5行7列のマス目の値(ある月のカレンダー)をリストのリストで定義してみよう。

cal = [["", "", "",  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24, 25],
       [26, 27, 28, 29, 30, 31, ""]]

ここで,このマス目上の7は,cal[2][3]ではなく,cal[1][2]であることを思い出してほしい。 cal[2][3]には,15が代入されている。Pythonのリストで表現した場合,7の位置は,2行3列目ではなく,1行2列目となる。 このマス目上の4は,1行7列目ではなく,0行6列目,すなわち,cal[0][6]である。 cal[1][7]としてしまうと,"IndexError: list index out of range"となってしまう。