(1) 2次元リストの基本

リストの中にリストが入ったものを2次元リストといいます。表形式のデータを格納するのに便利です。


        リスト名 = [リスト, リスト, リスト, … ]
            = [[値, 値, 値, … ], [値, 値, 値, … ], [値, 値, 値, … ], … ]
      

2次元リストの定義

2次元リストは次のように定義します。

data = [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]]

また、表形式のようにすると見やすいので、次のように書くことが多いです。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
      

2次元リストの値の取得

2次元リストの中から値を取り出すときは、data[i][j]のように指定します。data[i][j]datai番目のリストのうちj番目の要素を取り出すという意味ですが、これを表形式ではi 行目 j 列目といいます。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
        num = data[1][2]
        print(num)
      
23
0列目 1列目 2列目 3列目
0行目 11 12 13 14
1行目 21 22 23 24
2行目 31 32 33 34

data[i]のように最初のリストのインデックスだけ指定した場合は、i番目に格納されているリストを取得します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
        row = data[1]
        print(row)
      
[21, 22, 23, 24]

2次元リストの値の書き換え

2次元リストの中の値を書き換えるときは次のようにします。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
        data[1][2] = 99   # 1行目,2列目の値を99にする。
        print(data)
      
[[11, 12, 13, 14], [21, 22, 99, 24], [31, 32, 33, 34]]

2次元リストの要素数の取得

2次元リストdataについて、len(data)とすると、行の数([11, 12, 13, 14][21, 22, 23, 24][31, 32, 33, 34]の3つ)を取得します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
        print(len(data))
      
3

また、len(data[2])とすると、2行目のリスト[31, 32, 33, 34]の要素数(31323334の4つ)を取得します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]
        print(len(data[2]))
      
4

(2) 2次元リストとfor文

2次元リストの中の要素を順に出力する場合には、for文を用います。

基本的には、3-1. リスト(list) (3) リストとfor文の方法と同様ですが、2次元リストの場合は2-5. 繰り返し処理(for文)② (2) 二重のfor文で扱ったようにfor文をネストする必要があります。

インデックス番号を用いて順番に取得する

次の例では、インデックス番号を用いて2次元リストの要素を取得します。

len(data)dataの要素数を取得できるので、外側のループfor i in range(len(data))で、i0から要素数-1まで(先頭から末尾まで)変えながらループします。

内側のループfor j in range(len(data[i])):len(data[i])i番目のリストの要素数、つまりi行目の列数を取得します。つまり、for j in range(len(data[i])):で、i行目の要素を先頭から末尾までjの値を変えながらループします。


        data = [
         [11, 12, 13, 14],
         [21, 22, 23, 24],
         [31, 32, 33, 34]
        ]

        for i in range(len(data)):           # iを0からdataの要素数-1までループする
          for j in range(len(data[i])):    # jを0からi行目のリストの要素数-1までループする
            print(data[i][j], end="\t")  # i行目j列目の要素(data[i][j])を出力し、タブ文字\tで区切る(\はoption⌥+¥)
          print()                          # 内側のループが終わったら改行を入れる
      

        11  12  13  14  
        21  22  23  24  
        31  32  33  34
      

外側のループ内でprint(data[i])とすると、data内の要素をリストとして表示します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]

        for i in range(len(data)):
          print(data[i])
      

        [11, 12, 13, 14]
        [21, 22, 23, 24]
        [31, 32, 33, 34]
      

リスト内の要素を順番に取得する

また、次の例では、リストの要素を直接変数に取得します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]

        for row in data:           # data内の配列を順番にリストrowに入れる
          for x in row:
            print(x, end="\t") # タブ文字\tで区切る(\はoption⌥+¥)
          print()                # 内側のループが終わったら改行を入れる

        11  12  13  14  
        21  22  23  24  
        31  32  33  34
      

この方法では、for row in dataで2次元リストdataの各要素のリストをrowとして取り出しています。このループ内でprint(row)rowを表示すると、data内の各要素をリストとして出力します。


        data = [
           [11, 12, 13, 14],
           [21, 22, 23, 24],
           [31, 32, 33, 34]
          ]

        for row in data:  # data内の配列を順番にrowに入れる
          print(row)    # rowを表示
      

        [11, 12, 13, 14]
        [21, 22, 23, 24]
        [31, 32, 33, 34]