(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]はdataのi番目のリストのうち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]の要素数(31,32,33,34の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))で、iを0から要素数-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]