イテレータの連結と合成
メニューを表示するにはスワイプしてください
イテレータの連結と合成は、Pythonで強力なデータパイプラインを構築する手法。シンプルなイテレータやジェネレータ関数を連結することで、データを段階的に処理し、各段階でデータを変換またはフィルタリングして次に渡すことが可能。複数の操作を順番に適用したい場合、例えばアイテムのフィルタリング後に変換を行う、または複数のソースからデータを結合する場合に特に有用。上記の動画では、ジェネレータパイプラインを活用してコードをモジュール化し、メモリ効率を高め、中間リストの作成を避ける方法を示している。
具体例として、数値のシーケンスから偶数を除外し、残りの数値を二乗するケースを考える。これは、フィルタリング用と変換用の2つのジェネレータ関数を連結することで実現可能。この方法により、各アイテムは必要なときだけ処理され、コードが簡潔かつ効率的になる。
12345678910111213141516171819def filter_odds(numbers): for n in numbers: if n % 2 != 0: yield n def square_numbers(numbers): for n in numbers: yield n ** 2 # Original data data = range(10) # Chain the generators: first filter, then transform filtered = filter_odds(data) squared = square_numbers(filtered) # Collect results result = list(squared) print(result) # Output: [1, 9, 25, 49, 81]
最初の関数 filter_odds は、数値のイテラブルを受け取り、奇数のみを生成。2つ目の関数 square_numbers は、イテラブルを受け取り、各数値の二乗を生成。filter_odds の出力を直接 square_numbers に渡すことで、まずフィルタリングし、その後データを変換するパイプラインを構築。最終結果はリストにまとめて出力し、0から9までの奇数の二乗が表示される。
この方法は、各値を一度に1つずつ処理するためメモリ効率が高く、中間リストを作成しない。また、各ジェネレータ関数が単一の役割を持つため、コードのモジュール性が向上し、異なるパイプラインでも再利用可能。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください