【Python】レッスン4-10:タプルのアンパックを理解しよう

ながみえ
【Python学習記事のアイキャッチ画像】Lesson4-10 タプルのアンパックとネストを理解しよう

一つ前のLessonではタプルの基本について学習しました。

今回はタプルのアンパックについて見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編

Lesson4:データ構造編
・Lesson4-1:リストの定義と要素の追加を理解しよう
・Lesson4-2:リストの要素を削除しよう
・Lesson4-3:リストの情報を調べよう
・Lesson4-4:リストの集計・並べ替えを理解しよう
・Lesson4-5:リストのスライスを理解しよう
・Lesson4-6:リストのループ処理を理解しよう
・Lesson4-7:リストの内包表記を理解しよう
・Lesson4-8:リスト・タプル・辞書・集合の概要と違いを理解しよう
・Lesson4-9:タプルの基本を理解しよう
・Lesson4-10:タプルのアンパックを理解しよう ◁今回はココ
・Lesson4-11:辞書の基本を理解しよう
・Lesson4-12:辞書のループ処理を理解しよう
・Lesson4-13:辞書の内包表記を使ってリストから辞書を作ろう
・Lesson4-13:集合(セット)の基本を理解しよう
・練習問題4-1:宝探しゲームを作ろう
・練習問題4-2:ナインゲームを作ろう 
・練習問題4-3:マルバツゲームを作ろう
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-9 タプルの基本を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-11 辞書の定義と基本操作を理解しよう

タプルのアンパックとネストとは?

ここからタプルのアンパックとネストの説明に入ります。

ページ下部にはこのページで出てくる用語の意味をまとめた 用語集 もありますので、分からない言葉が出てきたらそちらも参考にしてください。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

タプルは複数の要素を一つのデータ構造として扱う際に使われますが、その中でも特に便利な機能として「タプルのアンパック」と「タプルのネスト」があります。

これらを活用することで、データの操作がより直感的かつ効率的になります。

アンパックとは?|要素を分解して個別変数に代入

アンパックとは、リストやタプルの各要素を個別の変数に展開する操作のことです。

例えば、複数の変数に一度に値を割り当てたい場合に使われます。

タプルのアンパックの使用例は以下の通りです。

# タプルを定義
person = ("John", 25, "Engineer")

# タプルのアンパック
name, age, profession = person # 3つの変数に、タプルの3つの要素をそれぞれ代入

# 結果の出力
print(f"名前: {name}")       # 名前: John
print(f"年齢: {age}")        # 年齢: 25
print(f"職業: {profession}") # 職業: Engineer

この例ではpersonというタプルの各要素が、それぞれnameageprofessionという変数に展開されています。

アンパックによってコードがシンプルになり、可読性が向上します。

ネストとは?|データ構造の中にデータ構造を格納

タプルのネストとは、タプルの中にさらにタプルを含めることができる機能です。

多次元のデータを一つのタプルで保持したい場合などに有効です。

タプルのネストの使用例は以下の通りです。

# ネストされたタプルの定義
nested_tuple = (("John", 25), ("Alice", 30), ("Bob", 22)) # タプルの中に3つのタプルを格納

# ネストされたタプルを展開
for name, age in nested_tuple:
    print(f"名前: {name}, 年齢: {age}")

この例ではタプルの中に複数のタプルが入っており、それぞれのタプルがアンパックされてnameageとして展開されています。

ネストされた構造を使うことで、データの階層化を容易に行うことができます。

まとめ

データ構造のアンパックとネストはPythonでのデータ操作を効率化する強力な機能です。

これらを活用することで可読性の高いコードを書きやすくなります。この技術を活用し、より効果的なプログラミングを目指しましょう。

Q
サイト改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

【Python】サイト改善アンケート
1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
(複数選択可)
※ 特定の記事に関する内容の場合は、記事番号(Python Lesson〇-〇)をご記入願います。

練習問題:タプルのアンパックを使ってみよう

この記事で学習した「タプルのアンパック」を復習する練習問題に挑戦しましょう。

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

問題|人の年齢と職業を管理しよう

タプルを使って名前、年齢、職業をまとめたデータを管理するプログラムを作成しましょう。

まず、名前、年齢、職業をそれぞれ1つのタプルにまとめて表示します。

その後、複数のタプルをネストして管理し、タプル内の各要素を順に表示するコードを作成してください。

以下の要件に従ってコードを完成させてください。

  1. タプル person を定義し、「佐藤」という名前、30歳、「エンジニア」という職業を含めること。
  2. タプル person の各要素をアンパックし、それぞれの変数に展開すること。
  3. print 関数を使って、展開した名前、年齢、職業を表示すること。
  4. 複数のタプルをネストした nested_tuple を定義し、以下の3人のデータを含めること:
    • 「田中」 28歳 「デザイナー」
    • 「鈴木」 25歳 「プログラマー」
    • 「高橋」 32歳 「マネージャー」
  5. for 文を使って、ネストされたタプルの各要素をアンパックし、名前、年齢、職業を表示すること。

ただし、以下のような実行結果となるコードを書くこと。

名前: 佐藤, 年齢: 30, 職業: エンジニア
名前: 田中, 年齢: 28, 職業: デザイナー
名前: 鈴木, 年齢: 25, 職業: プログラマー
名前: 高橋, 年齢: 32, 職業: マネージャー

ヒント|難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:単一のタプルを変数に展開して使う
・タプルは (値1, 値2, 値3) のように丸かっこで作る
・アンパックは 変数1, 変数2, 変数3 = タプル の形で書く
・変数を文字列に埋め込むときは f"..." を使うと便利

2:ネストされたタプルをループで順にアンパックする
・ネストされたタプルは (タプル1, タプル2, ...) の形で作る
・for文の for 変数1, 変数2, 変数3 in タプル: でアンパックできる
・出力形式を揃えるために f文字列を使うと見やすい

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# タプルの定義
person = ("""【穴埋め問題1】ここに名前、年齢、職業を含むタプルを定義してください""")

# タプルのアンパック(タプルの要素を変数に展開)
"""【穴埋め問題2】ここでタプルの各要素をアンパックして、それぞれの変数に展開してください"""

# アンパックされた値を出力
print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

# ネストされたタプルの定義(名前、年齢、職業)
nested_tuple = """【穴埋め問題3】ここで複数のタプルをネストした変数を定義してください"""

# ネストされたタプルのアンパック(3つの要素を展開して出力)
for name, age, profession in nested_tuple:
    print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例|

例えば以下のようなプログラムが考えられます。

Q
正解コード
# タプルの定義
person = ("佐藤", 30, "エンジニア")

# タプルのアンパック(タプルの要素を変数に展開)
name, age, profession = person

# アンパックされた値を出力
print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

# ネストされたタプルの定義(名前、年齢、職業)
nested_tuple = (("田中", 28, "デザイナー"), ("鈴木", 25, "プログラマー"), ("高橋", 32, "マネージャー"))

# ネストされたタプルのアンパック(3つの要素を展開して出力)
for name, age, profession in nested_tuple:
    print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

解答例の解説|

解答例の詳細解説は以下の通りです。

Q
詳細解説

単一のタプルを変数に展開して使う

# タプルの定義
person = ("佐藤", 30, "エンジニア")

# タプルのアンパック(タプルの要素を変数に展開)
name, age, profession = person

# アンパックされた値を出力
print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

このコードでは、まず person という変数にタプルを代入しています。
タプルとは、複数の値を1つにまとめて扱えるデータ型です。この場合、("佐藤", 30, "エンジニア") の3つの要素(名前・年齢・職業)をひとまとめにしています。

次に、name, age, profession = person のように書くことで、タプルのそれぞれの要素を個別の変数に分けて代入できます。
この操作を「アンパック」と呼びます。アンパックを使えば、person[0] のようにインデックス番号で取り出さなくても、分かりやすい変数名で直接アクセスできます。

最後に、print() 関数でアンパックした変数を組み合わせて出力しています。
ここでは、f"文字列{変数}" という形式を使って変数を文字列の中に埋め込む「f文字列」という書き方をしています。

ネストされたタプルをループで順にアンパックする

# ネストされたタプルの定義(名前、年齢、職業)
nested_tuple = (("田中", 28, "デザイナー"), ("鈴木", 25, "プログラマー"), ("高橋", 32, "マネージャー"))

# ネストされたタプルのアンパック(3つの要素を展開して出力)
for name, age, profession in nested_tuple:
    print(f"名前: {name}, 年齢: {age}, 職業: {profession}")

このコードでは、nested_tuple に3つのタプルが入っています。
各タプルは「名前・年齢・職業」というセットになっており、このようにタプルの中にさらにタプルが入っている状態を「ネストされたタプル」と呼びます。

for name, age, profession in nested_tuple: という書き方をすると、nested_tuple の中のタプルを1つずつ取り出し、その要素を3つの変数にアンパックできます。
この場合、ループが1回まわるごとに name には名前、age には年齢、profession には職業が自動的に代入されます。

最後に、1回ごとのループで取り出した値を print() で表示しています。
これにより、複数人分のデータを順番に出力できます。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPython学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-9 タプルの基本を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-11 辞書の定義と基本操作を理解しよう

タプルのアンパックの疑問解消|FAQと用語のまとめ

初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。

理解を深めたいときや、ふと疑問に感じたときに役立ててください。

FAQ|タプルのアンパックに関するよくある質問

Q
Q1. アンパックとは何を意味しますか?

アンパックは、複数の変数に対してタプルの要素を一度に代入する構文です。可読性とコードの簡潔さを高めるために使われます。

Q
Q2. ネストされたタプルをどう処理すればよいですか?

ネストされたタプルは多重ループや再帰を用いて展開可能です。データ構造の階層が深い場合は、要素アクセスに注意が必要です。

Q
Q3. アンパックで要素数が合わないとどうなりますか?

アンパック対象のタプルと変数の数が一致しない場合、ValueErrorが発生します。*演算子を使うことで可変長引数として受け取ることも可能です。

Python用語集|タプルのアンパックに関する用語一覧

今回の記事で出てきた用語・関数などを一覧で紹介します。

このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。

Python用語定義・使い方の概要解説記事へのリンク
リスト複数の要素を順序付きで格納でき、内容を変更可能なデータ構造。角括弧 [] で定義されるLesson4-1
タプルリストに似ているが、作成後に要素の変更ができないイミュータブルなデータ構造。丸括弧 () で表すLesson4-9
ネストリストやタプル、ループなどの中に同種の構造を入れ子状に定義・記述することLesson4-6
アンパックリストやタプルの複数の要素を、複数の変数に一括で代入する操作本記事
記事URLをコピーしました