このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】タプルのパッキングとアンパッキング

タプルのパッキングとアンパッキング

 タプルのパッキングとアンパッキングは、複数の値をひとまとめにして管理したり、ひとつのタプルから複数の変数へ同時に値を展開したりする便利なテクニックです。これにより、関数の戻り値として複数の値を返す場合や、データ構造を簡潔に扱う際にコードがすっきりし、読みやすくなります。ここでは、タプルへの値のパッキング方法と、パッキングされたタプルをアンパッキングして変数に代入する方法を、具体例や表を交えながら詳しく解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.タプルのパッキング

 タプルのパッキングとは、複数の値をひとつのタプルとしてまとめる操作のことです。値同士をカンマで区切るだけで、Pythonは自動的にタプルとしてまとめてくれるため、コードが非常にシンプルになります。

1.1. 基本的なタプルパッキング

 値をカンマで区切って記述するだけで、タプルが生成されます。以下の例では、2次元座標を表す数値をパッキングして、ひとつのタプルにまとめています。

サンプルプログラム

# 2次元座標を表すx座標とy座標をタプルにパッキング
x_coord = 15
y_coord = 30
point = x_coord, y_coord  # 丸括弧を省略してもタプルになる
print("パッキングされた座標:", point)
# 出力例: パッキングされた座標: (15, 30)

出力結果

パッキングされた座標: (15, 30)

解説

  • ここでは、変数x_coordy_coordに数値を代入し、カンマで区切ることでpointにタプルが作成されています。
  • 丸括弧は省略可能ですが、明示的に書く場合は point = (x_coord, y_coord) としても同じ結果になります。

1.2. パッキングの記法と注意点

 タプルのパッキングは、値の数に応じて記法が少し変わります。特に、要素が1つの場合は末尾にカンマが必要となります。また、複数の値をパッキングする際に、丸括弧を使うと意図が明確になり、コードの可読性が向上します。

サンプルプログラム

# 複数要素のタプルパッキング(丸括弧あり)
employee = ("Bob", "Developer", 75000)
print("従業員情報(丸括弧あり):", employee)
# 出力例: 従業員情報(丸括弧あり): ('Bob', 'Developer', 75000)

# 1要素のタプルパッキング(カンマが必須)
single_item = ("OnlyItem",)
print("1要素のタプル:", single_item)
# 出力例: 1要素のタプル: ('OnlyItem',)

# 丸括弧を省略したパッキング(可読性のため推奨されない場合もある)
data = "apple", 3.14, True
print("丸括弧省略のタプル:", data)
# 出力例: 丸括弧省略のタプル: ('apple', 3.14, True)

出力結果

従業員情報(丸括弧あり): ('Bob', 'Developer', 75000)
1要素のタプル: ('OnlyItem',)
丸括弧省略のタプル: ('apple', 3.14, True)

解説

  • 複数の値をパッキングする場合、丸括弧を用いるとタプルであることが視覚的に明確になります。
  • 要素が1つの場合、末尾のカンマがないとタプルではなく単一の値として扱われるので注意が必要です。

下記の表は、パッキングの記法の違いをまとめたものです。

記法説明
丸括弧ありの複数要素パッキング(a, b, c)複数の値をタプルとしてまとめる。
丸括弧省略の複数要素パッキングa, b, c値同士をカンマで区切ると自動的にタプルになる。
1要素のパッキング(a,) または a,1要素の場合は末尾にカンマが必要

2.タプルのアンパッキング

 アンパッキングは、タプルに格納された複数の値を、それぞれ別々の変数に展開する操作です。これにより、ひとつのタプルから複数の情報を簡単に取り出すことができます。

2.1. 基本的なアンパッキング

 タプルの要素数と同じ数の変数を左辺に並べることで、各要素が対応する変数に代入されます。以下の例では、従業員の情報がパッキングされたタプルから、それぞれの情報を変数に取り出します。

サンプルプログラム

# 従業員情報が格納されたタプル
employee_info = ("Alice", "Designer", 68000)

# タプルのアンパッキング(各要素を個別の変数に代入)
name, position, salary = employee_info

print("名前:", name)         # 出力例: 名前: Alice
print("役職:", position)     # 出力例: 役職: Designer
print("給与:", salary)       # 出力例: 給与: 68000

出力結果

名前: Alice
役職: Designer
給与: 68000

解説

  • 変数namepositionsalaryを用意し、タプルemployee_infoの各要素が順番に代入されます。
  • アンパッキングを利用することで、個々の要素に対して直接名前を付けることができ、コードの可読性が向上します。

2.2. 拡張アンパッキングの活用

 Pythonでは、アンパッキングの際に*演算子を使うことで、残りの要素をまとめてリストとして受け取ることができます。これにより、要素数が可変の場合でも柔軟に値を展開できます。

サンプルプログラム

# 数値のタプルを例に、先頭と末尾の値を取り出し、残りをまとめる
numbers = (10, 20, 30, 40, 50)

first, *middle, last = numbers

print("先頭の要素:", first)      # 出力例: 先頭の要素: 10
print("中間の要素:", middle)     # 出力例: 中間の要素: [20, 30, 40]
print("末尾の要素:", last)       # 出力例: 末尾の要素: 50

出力結果

先頭の要素: 10
中間の要素: [20, 30, 40]
末尾の要素: 50

解説

  • 変数firstlastはそれぞれタプルの最初と最後の要素を受け取り、*middleは中間のすべての要素をリストとしてまとめます。
  • この拡張アンパッキングにより、要素数が固定されていない場合でも、柔軟にデータを分割することが可能です。

以下の表は、基本的なアンパッキングと拡張アンパッキングの違いをまとめたものです。

アンパッキングの種類記法例説明
基本的なアンパッキングa, b, c = (1, 2, 3)タプルの各要素を対応する変数に順番に代入
拡張アンパッキングfirst, *middle, last = (1,2,3,4,5)先頭と末尾を個別に代入し、残りの要素をリストとしてまとめる。

まとめ

 タプルのパッキングとアンパッキングを活用することで、複数の値を効率的にまとめたり、必要に応じて分解したりすることが可能になります。

  • パッキングでは、カンマで区切るだけで複数の値をひとつのタプルにまとめることができ、丸括弧を使うとより明示的になります。
  • アンパッキングでは、タプルの各要素を対応する変数に一括で代入でき、拡張アンパッキングを使えば残りの要素を柔軟に取り出すこともできます。

次のステップでは、タプルに適用できるその他の便利な操作について詳しく解説していきます。