Python の `zip()` 関数は、複数のイテラブル(リストやタプルなど)を要素ごとに組み合わせて処理できる便利な関数です。この記事では、`zip()` 関数の基本的な使い方から応用例まで、実践的なコードとともに解説します。
zip()関数の基本的な使い方
`zip()` 関数は、複数のイテラブルの要素を1つずつ取り出し、タプルにまとめて返します。
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
result = zip(numbers, letters)
print(list(result)) # [(1, 'a'), (2, 'b'), (3, 'c')]異なる長さのイテラブルを扱う場合
`zip()` は最も短いイテラブルの長さに合わせて処理を終了します。
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
zipped = list(zip(list1, list2))
print(zipped) # [(1, 'a'), (2, 'b'), (3, 'c')]zip()関数の実践的な使用例
1. 辞書の作成
キーと値のリストから辞書を作成する場合に便利です。
keys = ['name', 'age', 'city']
values = ['John', 25, 'New York']
person = dict(zip(keys, values))
print(person) # {'name': 'John', 'age': 25, 'city': 'New York'}2. 行列の転置
2次元リストの行と列を入れ替えることができます。
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
transposed = list(zip(*matrix))
print(transposed) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]3. 複数のリストを同時にループ処理
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 35]
cities = ['London', 'Paris', 'Tokyo']
for name, age, city in zip(names, ages, cities):
print(f"{name} is {age} years old and lives in {city}")zip_longest()を使用した場合
`itertools.zip_longest()` を使用すると、最も長いイテラブルに合わせて処理を行えます。
from itertools import zip_longest
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
result = list(zip_longest(list1, list2, fillvalue='N/A'))
print(result) # [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'N/A')]zip()関数の注意点
1. メモリ効率:`zip()` はイテレータを返すため、必要に応じて `list()` などに変換する必要があります。
2. 一度使用したzip オブジェクトは再利用できません:
zipped = zip([1, 2], ['a', 'b'])
print(list(zipped)) # [(1, 'a'), (2, 'b')]
print(list(zipped)) # [] # 2回目は空のリストになるまとめ
`zip()` 関数は、複数のイテラブルを効率的に処理するための強力なツールです。特に以下の用途で活用できます:
- 複数のリストを同時にループ処理
- 辞書の作成
- 行列の転置
- データの組み合わせ
適切に使用することで、コードをより簡潔で読みやすくすることができます。