上級Python開発コース
チャプター
>
レベル
高度なリスト
マップ、フィルター、リデュース
目標
マップ、フィルター、リデュースを使用してアイスクリームのミックスと製造を完了させる。
いくつかのアイスクリームフレーバーは残量が少なかったり空だったりしますが、補充してアイスクリームを追加するための材料は十分にあります。これを行うには、ループや分岐コードを凝縮して記述量を最小限に抑えることができる強力なツールである Map を使用する必要があります。Filter および Reduce 関数は、Map 関数を補完し、コーディングに必要な柔軟性を提供します。
最初に、関数を使用するために functools ライブラリから Reduce をインポートする必要があります。プログラムの先頭に次のコードを追加してください: from functools import reduce 。Map と Filter 関数はPythonに組み込まれているため、インポートする必要はありません。
まず、ウォークイン冷凍庫からいくつかの材料を取り出し、金色のXマークまで歩き、ドアに向かって open() 関数を使ってドアを開けます。冷凍庫内の "cream" が入ったすべての瓶を取った後、緑のカーペット上のライトのXマークまで歩いて行ってください。
フィールドには、vanilla、strawberry、chocolate の3つのリスト定数があります。各定数はアイスクリームのフレーバーを構成する材料の組み合わせです。緑のXマークでは、strawberry リスト定数の内容を確認してください。まず、以前に取った "cream" を配置するために place() 関数を使用し、strawberry リスト定数の内容を確認するために speak() 関数を使用します。
確認が済んだら、strawberry リスト定数を使って Map 関数を使用する時です。このリスト内のすべての要素は小数です。map() 関数を使用すると、ループで各要素を個別に丸める必要がなく、リスト内のすべての要素を一度に丸めることができます。これを実現するために、map1 という名前のリストを作成し、strawberry リストと round() 関数を組み合わせて map() 関数を使用します。例えば、map1 = list(map(round, strawberry)) のようにします。処理が完了したら、speak() 関数を map1 とともに使用して結果を確認してください。
次に Filter に進みます。これは Map と同様に動作しますが、組み合わせて使用する関数が必要です。エディターの上部には、数値が 25 より大きいかどうかを判定するためのプリセット関数 main_ingredients が用意されています。
def main_ingredients(value):
return value > 25
ループで処理する代わりに、この関数を filter() 関数と組み合わせて使用することで、25 を超える項目、つまり主要な材料のみからなる新しいリストを作成することができます。新しいリスト filter1 を作成し、main_ingredients と map1 を用いて filter() 関数を適用し、作成済みの Map リスト内のすべての主要材料を抽出します。例えば、filter1 = list(filter(main_ingredients, value)) のようにします。処理が完了したら、speak() 関数を filter1 とともに使用して結果を確認してください。
次に Reduce に移ります。これは Filter と同様に動作しますが、リストを一つの単位に縮約(統合)するために使用されます。Filter と同様に、今回は2つの数字を動的に加算するカスタム関数 custom_sum を使用します。
def custom_sum(first, second):
return first + second
変数 reduce1 を作成し、custom_sum 関数と filter1 を組み合わせて reduce() 関数を使用し、すべての項目を一つの値に統合します。例えば、reduce1 = reduce(custom_sum, filter1) のようにします。処理が完了したら、speak() 関数を reduce1 とともに使用して結果を確認してください。
Map、Filter、Reduce のサイクルが完了したら、赤と青のカーペット上のライトのXマークでも同じサイクルを繰り返してください。赤いカーペットでは vanilla リスト定数を使用し、map2、filter2、reduce2 を作成します。青いカーペットでは chocolate リスト定数を使用し、map3、filter3、reduce3 を作成します。
最後に、紫のカーペット上にある最終のライトのXマークまで歩き、reduce1、reduce2、reduce3 を足して、バニラ、ストロベリー、チョコレートの主要な材料を組み合わせます。変数 neapolitan を作成し、すべての Reduce の結果を合算します。例えば、neapolitan = reduce1+reduce2+reduce3 のようにします。その組み合わせを speak() 関数で確認し、さらに place() 関数を使用してネオポリタンアイスクリームを作成し、レベルを完了させてください。