Python で zip() 関数を使用する方法 (イテラブルの結合)
Python の zip() 関数を使用して複数の反復可能オブジェクトを並列に結合する方法を学びます。辞書の作成、解凍ロジックをマスターし、長さの不一致を処理します。
概要
データセットを反復処理する場合、多くの場合、複数の関連リストを並行して処理する必要があります。たとえば、ユーザー名のリストとユーザー ID のリストを組み合わせたり、X 値と Y 値の座標を一致させたりします。入れ子になったループや、リストのインデックス付けカウンターを使用して項目にアクセスする代わりに、Python はエレガントな `zip()` 関数を提供します。
`zip(*iterables)` 関数は複数のイテラブルを引数として受け取り、それらを集約して、i 番目のタプルに各入力イテラブルの i 番目の要素が含まれるタプルのイテレータを返します。これにより、単一の `for` ループで 2 つ以上のコレクションを同時に簡単にループできます。
デフォルトでは、`zip()` は、最も短い入力反復可能値が使い尽くされると結合を停止します。より長い反復可能範囲内に残っている要素はすべて破棄されます。最長の反復可能値がなくなるまで要素をペアにして、欠損値をプレースホルダーで埋めたい場合、Python は標準ライブラリの `itertools` モジュールで `zip_longest()` を提供します。
コードと実行の出力
このスクリプトは、リストの並列反復、zip を使用した辞書の作成、zip_longest を使用した不一致の処理を示します。
from itertools import zip_longest
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
# 1. Basic Zipping in a loop
print("--- Parallel Iteration ---")
for name, score in zip(names, scores):
print(f"{name} scored {score}")
# 2. Creating a dictionary from two lists
user_dict = dict(zip(names, scores))
print("\nCreated Dictionary:", user_dict)
# 3. Handling unequal list lengths with zip_longest
extra_names = ["Alice", "Bob", "Charlie", "David"]
short_scores = [85, 90]
# Standard zip truncates
print("\nStandard zip output:", list(zip(extra_names, short_scores)))
# zip_longest fills missing values
zipped_long = list(zip_longest(extra_names, short_scores, fillvalue="N/A"))
print("zip_longest output:", zipped_long)--- Parallel Iteration ---
Alice scored 85
Bob scored 90
Charlie scored 95
Created Dictionary: {'Alice': 85, 'Bob': 90, 'Charlie': 95}
Standard zip output: [('Alice', 85), ('Bob', 90)]
zip_longest output: [('Alice', 85), ('Bob', 90), ('Charlie', 'N/A'), ('David', 'N/A')]段階的な実装
- 結合する複数のリストまたは反復可能オブジェクトを zip() 関数に渡します。
- 生成されたタプルを for ループ ステートメントで解凍し、クリーンな並列反復を実現します。
- マッピングに dict(zip(keys_list, value_list)) を使用して、zip オブジェクトを辞書に変換します。
- itertools.zip_longest をインポートして、末尾の値を失わずに長さの異なるリストを結合します。
よくある質問
zip 形式で圧縮されたタプルのシーケンスを「解凍」するにはどうすればよいですか?
解凍演算子 *: list(zip(*zipped_tuples)) を使用して、シーケンスを個別のリストに解凍できます。
zip() はメモリ内の要素を複製しますか?
いいえ、zip() はオンデマンドで要素を生成する反復子を返すため、非常にメモリ効率が高くなります。
関連トピック
推奨される Python リソース
関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。
Python 関数
Python 関数をマスターします。 def を使用して再利用可能なコードを作成する方法、引数を定義する方法、戻り値を定義する方法、ローカルおよびグローバルなスコープを理解する方法を学びます。
Python 数学モジュール関数のチートシート
Python 数学標準ライブラリのクイック リファレンス ガイド。三角関数、対数関数、丸め関数、算術関数の使用方法を学びます。
Python と JavaScript: どちらのプログラミング言語が最適ですか?
Python と JavaScript の包括的な比較。構文の違い、パフォーマンス、使用例 (バックエンドとフロントエンド)、およびコーディング例を調べます。