Python の zip() 関数を簡単な例で説明
Python の zip()
関数は、複数のリストやその他の反復可能オブジェクト (タプル、セット、文字列など) を 1 つのタプルの反復可能オブジェクトに結合できる優れたツールです。両面を結び付けるジャケットのジッパーのようなものだと考えてください。
このガイドでは、zip()
関数の詳細を、効果的な使用方法を理解するのに役立つシンプルで実用的な例とともに詳しく説明します。
zip()
関数はどのように機能しますか?
zip()
関数は、リストなどの複数の反復可能要素の要素を位置に基づいてペアにします。これは、各リストの最初の要素がペアになり、次に 2 番目の要素がペアになる、ということを意味します。反復可能オブジェクトの長さが同じでない場合、zip()
は最も短い反復可能オブジェクトの終わりで停止します。
zip()
の構文は非常に簡単です。
zip(*iterables)
複数の反復可能オブジェクト (リスト、タプルなど) を渡すことができ、それらはタプルに結合されます。
例 1: 2 つのリストの結合
2 つのリストがあり、それらを結合する単純なケースから始めましょう。名前のリストとそれに対応するスコアのリストがあり、それらをペアにしたいと想像してください。
# Two lists to combine
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 88]
# Using zip() to combine them
zipped = zip(names, scores)
# Convert the result to a list so we can see it
zipped_list = list(zipped)
print(zipped_list)
この例では、zip()
関数は 2 つのリスト (names
と scores
) を取得し、それらを要素ごとにペアにします。 names
の最初の要素 ("Alice"
) は、scores
の最初の要素 (85
) とペアになります。等々。結果をリストに変換すると次のようになります。
出力:
[('Alice', 85), ('Bob', 90), ('Charlie', 88)]
これにより、構造化された方法で関連データを簡単に操作できるようになります。
例 2: リストが不均一な場合はどうなりますか?
異なる長さのリストがあるとします。それでは何が起こるでしょうか? zip()
関数は、最も短いリストの最後に到達するとすぐに停止するほど賢い関数です。
# Lists of different lengths
fruits = ["apple", "banana"]
prices = [100, 200, 150]
# Zipping them together
result = list(zip(fruits, prices))
print(result)
この場合、fruits
リストには 2 つの要素があり、prices
リストには 3 つの要素があります。ただし、zip()
は最初の 2 つの要素のみを結合し、prices
の追加の値は無視します。
出力:
[('apple', 100), ('banana', 200)]
prices
リストの最後の値 (150
) が無視されることに注目してください。これは、それと組み合わせる 3 番目の果物がないためです。 zip()
関数は、不均一なリストを操作するときにエラーが発生しないようにしますが、リストのバランスが取れていない場合は一部のデータが失われる可能性があることも意味します。
例 3: ZIP 形式のオブジェクトの解凍
zip()
操作を逆にしたい場合はどうすればよいでしょうか?たとえば、2 つのリストを圧縮した後、それらを個々のリストに分割し直すことができます。これは、解凍演算子 *
を使用して簡単に行うことができます。
# Zipped lists
cities = ["New York", "London", "Tokyo"]
populations = [8000000, 9000000, 14000000]
zipped = zip(cities, populations)
# Unzipping them
unzipped_cities, unzipped_populations = zip(*zipped)
print(unzipped_cities)
print(unzipped_populations)
ここでは、まず cities
リストと populations
リストを一緒に圧縮します。次に、zip(*zipped)
を使用して、結合されたタプルを 2 つの別々のリストに「解凍」できます。 *
演算子は、圧縮されたタプルを元のコンポーネントに解凍します。
出力:
('New York', 'London', 'Tokyo')
(8000000, 9000000, 14000000)
これは、圧縮プロセスを逆にして元のデータを戻す方法を示しています。
例 4: 3 つ以上のリストを圧縮する
zip()
を使用するリストは 2 つだけに限定されません。必要なだけ反復可能をまとめて圧縮できます。以下に 3 つのリストを含む例を示します。
# Three lists to zip
subjects = ["Math", "English", "Science"]
grades = [88, 79, 92]
teachers = ["Mr. Smith", "Ms. Johnson", "Mrs. Lee"]
# Zipping three lists together
zipped_info = zip(subjects, grades, teachers)
# Convert to a list to see the result
print(list(zipped_info))
この例では、subjects
、grades
、Teachers
の 3 つのリストを圧縮しています。各リストの最初の項目がグループ化され、次に 2 番目の項目というようにグループ化されます。
出力:
[('Math', 88, 'Mr. Smith'), ('English', 79, 'Ms. Johnson'), ('Science', 92, 'Mrs. Lee')]
このようにして、複数の関連する情報を扱いやすいタプルに結合できます。
例 5: 文字列の圧縮
Python では文字列も反復可能であるため、リストの場合と同様に文字列を圧縮できます。 2つの文字列を組み合わせてみましょう。
# Zipping two strings
str1 = "ABC"
str2 = "123"
# Zipping the characters together
zipped_strings = list(zip(str1, str2))
print(zipped_strings)
ここでは、str1
の最初の文字が str2
の最初の文字と結合されます。
出力:
[('A', '1'), ('B', '2'), ('C', '3')]
これは、複数の文字列の文字を処理したり組み合わせたりする必要がある場合に特に便利です。
例 6: 辞書の圧縮
ディクショナリはリストとは若干異なりますが、zip()
を使用してそれらを組み合わせることができます。デフォルトでは、zip()
は辞書キーのみを圧縮します。例を見てみましょう:
# Two dictionaries
dict1 = {"name": "Alice", "age": 25"}
dict2 = {"name": "Bob", "age": 30"}
# Zipping dictionary keys
zipped_keys = list(zip(dict1, dict2))
print(zipped_keys)
ここで、zip()
は両方の辞書のキーをペアにします。
出力:
[('name', 'name'), ('age', 'age')]
辞書の値を圧縮したい場合は、 .values()
メソッドを使用して実行できます。
zipped_values = list(zip(dict1.values(), dict2.values()))
print(zipped_values)
出力:
[('Alice', 'Bob'), (25, 30)]
これで、2 つの辞書の値を簡単に組み合わせることができます。
例 7: ループ内での zip()
の使用
zip()
の最も一般的な使用法の 1 つは、複数のリストを同時に処理する場合のループ内での使用です。以下に例を示します。
# Lists of names and scores
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 88]
# Using zip() in a loop
for name, score in zip(names, scores):
print(f"{name} scored {score}")
このループは、names
リストと scores
リストの両方を同時に反復処理し、各名前を対応するスコアとペアにします。
出力:
Alice scored 85
Bob scored 90
Charlie scored 88
このようにループ内で zip()
を使用すると、関連データを操作するときにコードがすっきりして読みやすくなります。
結論
zip()
関数は、複数の反復可能オブジェクトをタプルに結合して、関連データの操作を容易にする Python の便利なツールです。リスト、タプル、文字列のいずれの項目をペアにする場合でも、zip()
はコードを簡素化し、ループで特に役立ちます。
この記事の例を使用すると、さまざまなシナリオで zip()
を使用する方法を十分に理解できるようになりました。
Python の zip()
関数に関するこの説明が役立つと思われた場合は、私のブログで取り上げているさらに詳細なプログラミング チュートリアルと概念もお楽しみいただけるでしょう。
コーディングを楽しんでください!