未分類

【Python】第2章第14回:zipを活用した複数リストのループ

Pythonのzip関数は、複数のリストを同時に処理する際に役立つ便利な機能です。本記事では、zipの基本構文から応用例までを解説します。

0. 記事の概要

この記事を読むメリット

  • zipの基本を理解:複数のリストを効率的に処理する方法を学べます。
  • コードの可読性向上:ループ内で複数リストを扱う際の記述が簡潔になります。
  • 実践的なスキルの習得:応用例を通じて、より高度なデータ処理が可能になります。

この記事で学べること

  • zip関数の基本構造と使い方
  • zip関数を用いたデータ処理の効率化
  • zip関数を応用した実践例

1. zipの基本構造

1.1 基本的な使い方

zip関数は、複数のイテラブル(リストやタプルなど)を同時にループ処理するために使用されます。

# zipの基本例
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]

for name, score in zip(names, scores):
    print(f"{name}のスコアは{score}点です。")
動作解説
  1. zip(names, scores)は、リストnamesscoresをペアとして結合します。
  2. 各ペアのnamescoreがループ内で展開され、printで出力されます。

1.2 zipの特性

zipは、入力リストの長さが異なる場合、短いリストに合わせて処理を終了します。

# 異なる長さのリストをzipで処理
names = ["Alice", "Bob"]
scores = [85, 90, 78]

for name, score in zip(names, scores):
    print(f"{name}のスコアは{score}点です。")
# 出力: Aliceのスコアは85点です。
#       Bobのスコアは90点です。
動作解説
  1. 短いリストnamesに合わせて、2回のループで処理が終了します。
  2. 余った要素(78)は無視されます。

2. zipを使った応用例

2.1 データの並べ替え

zipを使って、リストをソートする際に役立つ方法を紹介します。

# zipを使ったソート
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]

sorted_data = sorted(zip(scores, names), reverse=True)
for score, name in sorted_data:
    print(f"{name}のスコアは{score}点です。")
動作解説
  1. zip(scores, names)でスコアと名前をペアにします。
  2. sorted()でスコアを基準に降順に並べ替えます。
  3. 並べ替えられたデータをループ処理して出力します。

2.2 リストのアンパック

zipを使って、複数のリストをアンパック(元のリストに戻す)できます。

# zipを使ったアンパック
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]

zipped = zip(names, scores)
unzipped = list(zip(*zipped))

print(unzipped)
# 出力: [['Alice', 'Bob', 'Charlie'], [85, 90, 78]]
動作解説
  1. zip(names, scores)でデータをペアにします。
  2. zip(*zipped)でペアを元の形式(リスト)に戻します。

3. 実践例:zipを活用したプログラム

学生の名前、スコア、順位を同時に処理して出力するプログラムを作成します。

# zipを活用したプログラム
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
ranks = [2, 1, 3]

for name, score, rank in zip(names, scores, ranks):
    print(f"{rank}位: {name} - {score}点")
動作解説
  1. 名前、スコア、順位をzipで結合します。
  2. 各要素を展開し、printでフォーマットされた出力を行います。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 2つのリストをzipで結合し、合計点を出力するプログラムを作成してください。
  2. 3つのリストをzipで結合し、特定の条件に基づいて要素をフィルタリングしてください。

5. 練習問題の解答と解説

問1の解答例

# 合計点を出力
math_scores = [50, 60, 70]
english_scores = [40, 50, 60]

for math, english in zip(math_scores, english_scores):
    print(f"合計点: {math + english}")

問2の解答例

# 特定条件でフィルタリング
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
ranks = [2, 1, 3]

for name, score, rank in zip(names, scores, ranks):
    if score >= 80:
        print(f"{rank}位: {name} - {score}点")

6. まとめ

Pythonのzip関数は、複数のリストを効率的に処理する際に非常に役立ちます。基本を理解した上で、応用例にも挑戦してみてください。