[Python] 2次元リストの使い方(初期化/追加/参照など)を詳しく解説
Pythonで2次元リストを扱う際には、リストのリストとして表現します。初期化は、例えばmatrix = [[0]*3 for _ in range(3)]
のように行います。
要素の追加はappend()
メソッドを使用し、matrix.append([1, 2, 3])
のように新しい行を追加できます。
要素の参照はインデックスを用いて行い、matrix[0][1]
で1行目の2列目の要素にアクセスできます。
2次元リストは柔軟で、異なる長さのリストを含むことも可能です。
- 2次元リストの基本的な構造と初期化方法
- 行や列の追加、特定の位置への要素の挿入方法
- インデックスやスライスを使った要素の参照方法
- 行列の転置や加算、減算、積の計算方法
- 2次元リストを用いたデータの集計方法
2次元リストの基本
2次元リストとは
2次元リストは、リストの中にリストを持つデータ構造で、行と列の形式でデータを格納します。
例えば、行列のようにデータを整理することができ、各要素には行と列のインデックスを使ってアクセスします。
Pythonでは、リストを使って簡単に2次元リストを作成できます。
2次元リストの利点と用途
2次元リストの主な利点と用途は以下の通りです。
利点・用途 | 説明 |
---|---|
データの整理 | 行と列でデータを整理しやすい。 |
簡単なアクセス | インデックスを使って特定の要素に簡単にアクセスできる。 |
数学的操作 | 行列の演算やデータの集計に利用できる。 |
可読性 | データの構造が明確で、可読性が高い。 |
Pythonでの2次元リストの基本構文
Pythonで2次元リストを作成する基本的な構文は以下の通りです。
# 2次元リストの初期化
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
この例では、3行3列の2次元リストを作成しています。
各要素には、行と列のインデックスを使ってアクセスできます。
例えば、matrix[0][1]
は1行2列目の要素(値は2)を指します。
2次元リストの初期化
空の2次元リストの作成
空の2次元リストを作成するには、単にリストのリストを初期化します。
以下のように記述します。
# 空の2次元リストの作成
empty_matrix = []
このempty_matrix
は、要素を追加するまで空の状態です。
後で行や列を追加することができます。
固定サイズの2次元リストの作成
固定サイズの2次元リストを作成する場合、リスト内にリストを埋め込むことで初期化します。
以下の例では、3行4列のリストを作成しています。
# 固定サイズの2次元リストの作成
fixed_size_matrix = [[0 for _ in range(4)] for _ in range(3)]
このコードでは、すべての要素が0で初期化された3行4列の2次元リストが作成されます。
_
はループ変数を使わないことを示しています。
リスト内包表記を使った初期化
リスト内包表記を使うことで、より簡潔に2次元リストを初期化できます。
以下の例では、1から9までの数値を持つ3行3列のリストを作成しています。
# リスト内包表記を使った初期化
matrix_with_comprehension = [[j + 1 + i * 3 for j in range(3)] for i in range(3)]
このコードでは、matrix_with_comprehension
に1から9までの数値が格納された3行3列の2次元リストが作成されます。
各行は、内包表記を使って生成されています。
2次元リストへの要素の追加
行の追加
2次元リストに新しい行を追加するには、append()メソッド
を使用します。
以下の例では、既存の2次元リストに新しい行を追加しています。
# 既存の2次元リスト
matrix = [
[1, 2, 3],
[4, 5, 6]
]
# 新しい行の追加
matrix.append([7, 8, 9])
このコードを実行すると、matrix
は次のようになります。
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
列の追加
2次元リストに新しい列を追加するには、各行に対して新しい要素を追加する必要があります。
以下の例では、すべての行に新しい列を追加しています。
# 既存の2次元リスト
matrix = [
[1, 2, 3],
[4, 5, 6]
]
# 新しい列の追加
for row in matrix:
row.append(0) # 各行に0を追加
このコードを実行すると、matrix
は次のようになります。
[[1, 2, 3, 0],
[4, 5, 6, 0]]
特定の位置への要素の挿入
特定の位置に要素を挿入するには、insert()メソッド
を使用します。
以下の例では、1行目の2列目に新しい要素を挿入しています。
# 既存の2次元リスト
matrix = [
[1, 2, 3],
[4, 5, 6]
]
# 特定の位置への要素の挿入
matrix[0].insert(1, 9) # 1行目の2列目に9を挿入
このコードを実行すると、matrix
は次のようになります。
[[1, 9, 2, 3],
[4, 5, 6]]
このようにして、2次元リストに対して行や列を追加したり、特定の位置に要素を挿入することができます。
2次元リストの参照
インデックスを使った要素の参照
2次元リストの特定の要素にアクセスするには、行と列のインデックスを使用します。
以下の例では、特定の要素を参照しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 特定の要素の参照
element = matrix[1][2] # 2行3列目の要素を参照
このコードを実行すると、element
には値6
が格納されます。
インデックスは0から始まるため、matrix[1][2]
は2行目の3列目を指します。
スライスを使った部分リストの取得
スライスを使用することで、2次元リストの一部を取得することができます。
以下の例では、特定の行と列の範囲を取得しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# スライスを使った部分リストの取得
sub_matrix = [row[1:3] for row in matrix] # 各行の2列目から3列目を取得
このコードを実行すると、sub_matrix
には次のようなリストが格納されます。
[[2, 3],
[5, 6],
[8, 9]]
ループを使った全要素の参照
2次元リストの全要素を参照するには、ネストされたループを使用します。
以下の例では、すべての要素を出力しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# ループを使った全要素の参照
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j], end=' ')
print() # 行の終わりで改行
このコードを実行すると、次のように全要素が出力されます。
1 2 3
4 5 6
7 8 9
このように、インデックス、スライス、ループを使って2次元リストの要素を参照することができます。
2次元リストの更新
インデックスを使った要素の更新
2次元リストの特定の要素を更新するには、インデックスを指定して新しい値を代入します。
以下の例では、特定の要素を更新しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 特定の要素の更新
matrix[1][1] = 10 # 2行2列目の要素を10に更新
このコードを実行すると、matrix
は次のようになります。
[[1, 2, 3],
[4, 10, 6],
[7, 8, 9]]
スライスを使った部分リストの更新
スライスを使用して、2次元リストの一部を一度に更新することもできます。
以下の例では、特定の行の要素を更新しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# スライスを使った部分リストの更新
matrix[0][1:3] = [20, 30] # 1行目の2列目と3列目を更新
このコードを実行すると、matrix
は次のようになります。
[[1, 20, 30],
[4, 5, 6],
[7, 8, 9]]
ループを使った全要素の更新
2次元リストの全要素を一括で更新するには、ネストされたループを使用します。
以下の例では、すべての要素に1を加算しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# ループを使った全要素の更新
for i in range(len(matrix)):
for j in range(len(matrix[i])):
matrix[i][j] += 1 # 各要素に1を加算
このコードを実行すると、matrix
は次のようになります。
[[2, 3, 4],
[5, 6, 7],
[8, 9, 10]]
このように、インデックス、スライス、ループを使って2次元リストの要素を更新することができます。
2次元リストの削除
行の削除
2次元リストから特定の行を削除するには、del
文またはpop()メソッド
を使用します。
以下の例では、2行目を削除しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 行の削除
del matrix[1] # 2行目を削除
このコードを実行すると、matrix
は次のようになります。
[[1, 2, 3],
[7, 8, 9]]
列の削除
2次元リストから特定の列を削除するには、各行に対してpop()メソッド
を使用します。
以下の例では、2列目を削除しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 列の削除
for row in matrix:
row.pop(1) # 各行の2列目を削除
このコードを実行すると、matrix
は次のようになります。
[[1, 3],
[4, 6],
[7, 9]]
特定の要素の削除
特定の要素を削除するには、remove()メソッド
を使用します。
以下の例では、値5
を削除しています。
# 2次元リストの作成
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 特定の要素の削除
for row in matrix:
if 5 in row:
row.remove(5) # 値5を削除
このコードを実行すると、matrix
は次のようになります。
[[1, 2, 3],
[4, 6],
[7, 8, 9]]
このように、行、列、特定の要素を削除する方法を使って、2次元リストを柔軟に操作することができます。
2次元リストの応用例
行列の転置
行列の転置とは、行と列を入れ替える操作です。
2次元リストを使って行列を転置するには、リスト内包表記を使用します。
以下の例では、3行2列の行列を転置しています。
# 2次元リストの作成
matrix = [
[1, 2],
[3, 4],
[5, 6]
]
# 行列の転置
transposed_matrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
このコードを実行すると、transposed_matrix
は次のようになります。
[[1, 3, 5],
[2, 4, 6]]
行列の加算と減算
2つの同じサイズの行列を加算または減算するには、ネストされたループを使用します。
以下の例では、2つの行列を加算しています。
# 2つの2次元リストの作成
matrix_a = [
[1, 2, 3],
[4, 5, 6]
]
matrix_b = [
[7, 8, 9],
[10, 11, 12]
]
# 行列の加算
sum_matrix = [[matrix_a[i][j] + matrix_b[i][j] for j in range(len(matrix_a[0]))] for i in range(len(matrix_a))]
このコードを実行すると、sum_matrix
は次のようになります。
[[8, 10, 12],
[14, 16, 18]]
同様に、行列の減算も行えます。
# 行列の減算
difference_matrix = [[matrix_a[i][j] - matrix_b[i][j] for j in range(len(matrix_a[0]))] for i in range(len(matrix_a))]
このコードを実行すると、difference_matrix
は次のようになります。
[[-6, -6, -6],
[-6, -6, -6]]
行列の積
行列の積を計算するには、内積を考慮する必要があります。
以下の例では、2つの行列の積を計算しています。
# 2つの2次元リストの作成
matrix_a = [
[1, 2],
[3, 4]
]
matrix_b = [
[5, 6],
[7, 8]
]
# 行列の積
product_matrix = [[sum(matrix_a[i][k] * matrix_b[k][j] for k in range(len(matrix_b))) for j in range(len(matrix_b[0]))] for i in range(len(matrix_a))]
このコードを実行すると、product_matrix
は次のようになります。
[[19, 22],
[43, 50]]
2次元リストを使ったデータの集計
2次元リストを使ってデータを集計することも可能です。
以下の例では、各行の合計を計算しています。
# 2次元リストの作成
data = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
# 各行の合計を計算
row_sums = [sum(row) for row in data]
このコードを実行すると、row_sums
は次のようになります。
[60, 150, 240]
このように、2次元リストは行列の演算やデータの集計に非常に便利なデータ構造です。
よくある質問
まとめ
この記事では、Pythonにおける2次元リストの基本的な使い方から応用例までを詳しく解説しました。
2次元リストは、データの整理や数学的な操作に非常に便利なデータ構造であり、さまざまな場面で活用できます。
ぜひ、実際のプログラミングにおいて2次元リストを使ってみてください。