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

【Python入門】for文とアンパッキング

for文とアンパッキング

 Pythonのfor文とアンパッキングを組み合わせると、イテラブルなデータ構造から複数の値を同時に取り出すことができ、コードの可読性や効率が大幅に向上します。特に辞書の場合、items()メソッドを利用することで、キーと値のペアをタプルとしてまとめて取り出し、これをアンパッキングして個別の変数に代入することが可能です。
 ここでは、for文とアンパッキングの基本構文、処理の流れ、さらに辞書だけでなく他のイテラブル(例えばタプルを格納したリスト)に対しても利用できる応用例について、具体的なコード例や表を用いて詳しく解説します。

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

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

1.for文とアンパッキングの基本概念

1.1. 基本構文とその役割

 for文は、イテラブルなオブジェクトから1個ずつ要素を取り出し、指定された変数に代入してループ内の文を実行します。アンパッキングを用いると、タプルやリストの要素が複数ある場合に、それぞれを別々の変数に展開できます。基本的な構文は次の通りです。

for 変数1, 変数2 in イテラブル:
    文...

解説

  • 変数1, 変数2: イテラブルから取り出されるタプル(またはリスト)の各要素が順に代入されます。
  • イテラブル: 辞書のitems()メソッドが返すタプルのリストや、タプルを要素とするリストなど、複数の値をまとめたオブジェクトです。
  • インデントされたブロック内の文が、各ループで実行されます。

1.2. 辞書の for文とアンパッキングによる値の取り出し

 辞書に対してfor文を適用すると、デフォルトではキーが順次取り出されますが、items()メソッドを使えば、キーと値のペア(タプル)をまとめて取り出すことができます。これをアンパッキングすることで、キーと値を別々の変数に格納できます。

【サンプルプログラム(辞書の場合)】

# 辞書の作成:果物の名前をキー、価格を値として管理
fruits = {'apple': 150, 'banana': 100, 'orange': 120}

# for文とアンパッキングを使って、各果物の名前と価格を取り出す
for fruit, price in fruits.items():
    print(fruit, "costs", price, "yen")

実行結果

apple costs 150 yen
banana costs 100 yen
orange costs 120 yen

解説

  • fruits.items() は、各キーと値のペアをタプルとして返す辞書ビューオブジェクトです。
  • for fruit, price in fruits.items(): のように書くと、各タプルがアンパッキングされ、fruit にキー、price に値が代入されます。
  • 結果として、例えば「apple costs 150 yen」といった出力が得られ、どの果物の価格かが明確に示されます。

2.for文とアンパッキングの応用例

2.1. タプルを格納したリストでのアンパッキング

 辞書以外にも、タプルを要素とするリストに対しても同様にアンパッキングが利用できます。次の例では、果物とその在庫数をタプルで管理したリストから、各果物名と在庫数を取り出して表示します。

# タプルを格納したリストの作成:果物の名前と在庫数のペア
inventory = [('apple', 50), ('banana', 30), ('orange', 20)]

# for文とアンパッキングで各ペアを取り出す
for name, stock in inventory:
    print(name, "has", stock, "units in stock")

実行結果

apple has 50 units in stock
banana has 30 units in stock
orange has 20 units in stock

解説

  • リスト inventory は、各要素がタプルであり、果物の名前と在庫数が格納されています。
  • for name, stock in inventory: とすることで、各タプルがアンパッキングされ、name に果物名、stock に在庫数が代入されます。
  • 出力例として「apple has 50 units in stock」などが得られ、データの内容が明確になります。

2.2. 辞書とリストのアンパッキングの違い

 辞書のアンパッキングでは、キーと値がタプルとして取得される点に注意してください。一方、リストはそのままタプルの形で要素が格納されているため、アンパッキングの手法は同じですが、データの意味付けが異なります。

対象アンパッキング方法サンプルコード例
辞書for key, value in dict.items():for fruit, price in fruits.items():
 print(fruit, "costs", price, "yen")
タプルのリストfor var1, var2 in list:for name, stock in inventory:
 print(name, "has", stock, "units")

解説

  • 辞書の場合、items()メソッドを利用してキーと値のペアをタプルとして取得します。
  • タプルのリストの場合、各要素は既にタプルとなっているため、直接アンパッキングが可能です。

まとめ

 for文とアンパッキングを組み合わせると、イテラブルなデータ構造から複数の値を同時に取り出すことができ、コードの可読性が向上します。

  • 基本構文は、for 変数1, 変数2 in イテラブル: の形で、タプルの各要素をそれぞれの変数に展開します。
  • 辞書の場合、items()メソッドを使用してキーと値のペアをタプルで取得し、アンパッキングによって個別に操作できます。
  • リストの場合、各要素がタプルとして格納されているならば、同じ方法でアンパッキングが利用でき、データの意味が明確になります。

 これらの手法を活用することで、複雑なデータ構造から必要な情報を簡潔に抽出し、より読みやすく保守性の高いプログラムを作成できるようになります。