zip()関数はPythonの組み込み関数の1つで、複数のイテラブル(リストやタプルなど)の要素を1つずつ取り出して、タプルにまとめる処理を行います。
zip()関数の基本的な使い方
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(list(zipped)) # [(1, 'a'), (2, 'b'), (3, 'c')]zip()関数は以下のような特徴があります:
- 複数のイテラブルを同時に処理できる
- 返り値はzipオブジェクト(イテレータ)
- 最短のイテラブルの長さに合わせて処理が終了する
よくある使用例
1. 複数リストの同時ループ処理
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f'{name} is {age} years old')2. 辞書の作成
keys = ['name', 'age', 'city']
values = ['John', 28, 'New York']
my_dict = dict(zip(keys, values))
print(my_dict) # {'name': 'John', 'age': 28, 'city': 'New York'}3. 行列の転置
matrix = [[1, 2, 3],
[4, 5, 6]]
transposed = list(zip(*matrix))
print(transposed) # [(1, 4), (2, 5), (3, 6)]注意点
1. 長さの異なるイテラブルを扱う場合
list1 = [1, 2, 3, 4]
list2 = ['a', 'b']
print(list(zip(list1, list2))) # [(1, 'a'), (2, 'b')]最短のイテラブルの長さに合わせて処理されるため、余分な要素は無視されます。
2. zipオブジェクトは一度しか使えない
zipped = zip([1, 2], ['a', 'b'])
print(list(zipped)) # [(1, 'a'), (2, 'b')]
print(list(zipped)) # [] # 2回目は空のリストになる応用テクニック
1. zip_longest()の使用
itertools.zip_longest()を使用すると、最長のイテラブルに合わせて処理できます:
from itertools import zip_longest
list1 = [1, 2, 3]
list2 = ['a', 'b']
result = list(zip_longest(list1, list2, fillvalue=None))
print(result) # [(1, 'a'), (2, 'b'), (3, None)]2. unzipの実装
zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*zipped)
print(numbers) # (1, 2, 3)
print(letters) # ('a', 'b', 'c')まとめ
zip()関数は複数のイテラブルを効率的に処理するための強力なツールです。以下のような場面で特に有用です:
- 複数のリストを同時にループ処理する
- 辞書を作成する
- データの構造を変換する
適切に使用することで、コードをより簡潔で読みやすくすることができます。