はじめに
Python では、与えられた関数に基づいてリストの要素をグループ化することができます。これは、単語のリストを長さで、または数値のリストを偶数/奇数でグループ化したい場合など、多くのシチュエーションで役立ちます。このチャレンジでは、与えられた関数に基づいてリストの要素をグループ化する関数を書くよう求められます。
Python では、与えられた関数に基づいてリストの要素をグループ化することができます。これは、単語のリストを長さで、または数値のリストを偶数/奇数でグループ化したい場合など、多くのシチュエーションで役立ちます。このチャレンジでは、与えられた関数に基づいてリストの要素をグループ化する関数を書くよう求められます。
引数としてリスト lst と関数 fn を受け取り、fn を lst の要素に適用した結果をキーとし、fn をそれらに適用したときに対応するキーを生成する lst の要素のリストを値とする辞書を返す関数 group_by(lst, fn) を書きなさい。
たとえば、数値のリスト [6.1, 4.2, 6.3] があり、それらを整数部分でグループ化したい場合、グループ化関数として math モジュールの floor 関数を使用できます。期待される出力は {4: [4.2], 6: [6.1, 6.3]} になります。
from collections import defaultdict
def group_by(lst, fn):
d = defaultdict(list)
for el in lst:
d[fn(el)].append(el)
return dict(d)
from math import floor
group_by([6.1, 4.2, 6.3], floor) ## {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) ## {3: ['one', 'two'], 5: ['three']}
このチャレンジでは、与えられた関数に基づいてリストの要素をグループ化する方法を学びました。また、辞書を使ってグループを格納し、それらを埋めるためのループを使ってこれを行う関数を書きました。これは、多くの異なるコンテキストで適用できる便利な技術です。