itertools モジュールはイテレータを扱うための強力なツール群を提供します。関数と組み合わせることで、メモリ効率の良いデータ処理が可能です。
itertools.chain:複数のイテラブルを連結
from itertools import chain list1 = [1, 2, 3] list2 = [4, 5, 6] combined = list(chain(list1, list2)) print(combined) # [1, 2, 3, 4, 5, 6]
itertools.islice:イテレータのスライス
from itertools import islice def infinite_counter(): n = 0 while True: yield n n += 1 first_five = list(islice(infinite_counter(), 5)) print(first_five) # [0, 1, 2, 3, 4]
itertools.takewhile / dropwhile
条件を満たす間だけ要素を取得、またはスキップします。
from itertools import takewhile, dropwhile numbers = [2, 4, 6, 7, 8, 10] result = list(takewhile(lambda x: x % 2 == 0, numbers)) print(result) # [2, 4, 6]
itertools.groupby:連続する要素をグループ化
from itertools import groupby data = [("A", 1), ("A", 2), ("B", 3), ("B", 4), ("A", 5)] for key, group in groupby(data, key=lambda x: x[0]): print(key, list(group)) # A [('A', 1), ('A', 2)] # B [('B', 3), ('B', 4)] # A [('A', 5)]
groupby は連続する同一キーをグループ化します。事前にソートが必要な場合があります。
itertools.starmap:アンパックして適用
from itertools import starmap pairs = [(2, 3), (4, 5), (6, 7)] result = list(starmap(pow, pairs)) print(result) # [8, 1024, 279936]
map とは異なり、各要素をアンパックして関数に渡します。