2次元配列

配列の要素が二方向に連続して並んでいるものを2次元配列と呼びます(二方向に連続したインデックスによってアクセスできるということであり、実際のメモリ領域では二方向にはなりません)。「リストのリスト」と表現することができ、リストの各要素がリストを持っているような構造になります。下図は2次元配列の概念図です:

for 文を使ったリスト内包表記で2次元配列を作成・初期化ことができます。

変数名 = [[初期値 for i in range(横方向のサイズ)] for j in range(縦方向のサイズ)]

たとえば、縦方向のサイズが 5 、横方向のサイズが 7 、初期値が 0 の2次元配列は以下のように初期化することができます:

tbl = [[0 for i in range(7)] for j in range(5)]
print(tbl)
# [
#  [0, 0, 0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0, 0, 0]
# ]

また、個々に対して直接値を指定して定義することもできます。

tbl = [[8, 6, 7, 2, 5], [3, 2, 4, 6, 4], [1, 5, 2, 3, 7]]
print(tbl)
# [
#  [8, 6, 7, 2, 5],
#  [3, 2, 4, 6, 4],
#  [1, 5, 2, 3, 7]
# ]

2次元配列要素へのアクセス

次のように、定義した2次元配列に対して値を設定することができます。

tbl = [[0 for i in range(7)] for j in range(5)]
tbl[1][5] = 3
tbl[3][1] = 7
tbl[4][6] = 0
value = tbl[3][1]   # value の値は 7
print(value)        # 7

次のプログラムは、2次元配列を初期化してその要素を出力するプログラムです。

tbl = [[i+j for i in range(7)] for j in range(5)]

for i, row in enumerate(tbl):
    for j, elem in enumerate(row):
        if j > 0: print(" ", end = "")
        print(elem, end = "")
    print()

# 0 1 2 3 4 5 6
# 1 2 3 4 5 6 7
# 2 3 4 5 6 7 8
# 3 4 5 6 7 8 9
# 4 5 6 7 8 9 10

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。