Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのタプルアンパックとは?仕組みと使い方を実例付きで解説


タプルのアンパック(unpacking)を理解する前に、まず「タプル」とは何かをおさえておきましょう。

タプルとは

タプルとは、Pythonでイミュータブル(変更不可)なオブジェクトを格納するためのデータ構造です。タプルは複数の要素を順序付けて保持するシーケンス型の一種で、一度作成すると要素の追加・削除・変更ができません。リストとの大きな違いは、この「変更不可」である点と、丸括弧 () を使って定義する点にあります。

パッキングとアンパックの関係

タプルには「パッキング」と「アンパック」という2つの操作があります。

  • パッキング(packing):複数の値を1つの新しいタプルにまとめて格納すること。
  • アンパック(unpacking):タプルに格納された値を取り出し、個々の変数に代入すること。

アンパックでは、代入式の右辺(RHS)にあるタプルの値が、左辺(LHS)の各変数へ順番に割り当てられます。ここで重要なルールとして、左辺の変数の数は、右辺のタプルに含まれる値の数と一致していなければなりません

例1:基本的なタプルのアンパック

my_tuple = ("Tutorials Point", 132, "Employees")  # タプルのパッキング
(company_name, employees_count, information) = my_tuple  # タプルのアンパック

print(company_name)
print(employees_count)
print(information)

出力結果

Tutorials Point
132
Employees

例2:別のデータでのアンパック

my_tuple = ("RRS College of Engg and Technology", 6000, "Engineering")  # タプルのパッキング
(college, students, category) = my_tuple  # タプルのアンパック

# 大学名を出力
print(college)
# 学生数を出力
print(students)
# 大学の区分を出力
print(category)

出力結果

RRS College of Engg and Technology
6000
Engineering

変数の数が一致しない場合のエラー

左辺の変数の数とタプルの要素数が異なる場合、ValueError が発生してプログラムが停止します。

a, b = (1, 2, 3)
# ValueError: too many values to unpack (expected 2)

応用:*演算子を使った拡張アンパック

Python 3以降では、変数名の先頭に * を付けることで、余った要素をリストとしてまとめて受け取ることができます。これにより、要素数が不定の場合でも柔軟にアンパックが可能です。

first, *rest = (10, 20, 30, 40)
print(first)  # 10
print(rest)   # [20, 30, 40]
  1. Pythonの「print >>」構文とは?ファイルへの出力方法を解説

    「print >>」は、Python 2における標準のprintステートメントを拡張するための構文です。この構文を使うと、デフォルトの出力先であるsys.stdout(標準出力)ではなく、任意のファイルライクなオブジェクトに対して直接出力できるようになります。つまり、画面に表示する代わりに、ファイルやその他の出力ストリームへ直接書き込むことが可能になります。基本的な使い方例えば、「my_file」という名前のファイルを開いた場合、次のように書き込むことができます。>>> my_file = open(my_file, w) >>> print &

  2. Pythonのprint()関数とは?役割と基本的な使い方をわかりやすく解説

    Python 3において、print()は組み込み関数の一つで、引数として渡された値を画面(標準出力)に表示するために使われます。プログラミング初心者が最初に学ぶ関数でもあり、デバッグや動作確認にも欠かせない存在です。print()関数の基本的な使い方>>> print("Hello!") Hello! >>> print(5) 5このように、文字列や数値など、さまざまな型のオブジェクトをそのまま渡すだけで出力できます。Python 2以前との違い:文から関数へ実は、Python 2以前ではprintは「関数」ではなく「ステートメント(文